Sails.js SAILSJ的最佳实践是在初始化其他模型之前使用数据为数据库种子

Sails.js SAILSJ的最佳实践是在初始化其他模型之前使用数据为数据库种子,sails.js,Sails.js,有一个模型,所有其他模型都假设它的存在。 它应该在调用任何API函数之前初始化 我这样做的方式(不起作用): 1) 在api/models中定义模型,我们称之为Location.js 2) 将以下内容添加到bootstrap.js var Locations = require('../api/models/Locations.js'); module.exports.bootstrap = function (cb) { // seed the database

有一个模型,所有其他模型都假设它的存在。 它应该在调用任何API函数之前初始化

我这样做的方式(不起作用):

1) 在api/models中定义模型,我们称之为Location.js

2) 将以下内容添加到bootstrap.js

    var Locations = require('../api/models/Locations.js');

    module.exports.bootstrap = function (cb) {

      // seed the database with Locations
        var locationsObj = {
            country: 'Australia',
            states: ['Brisbane', 'Perth', 'Sydney']
        };
        Location.create(locationsObj, function locationsObj(err, locations) {
            if (err) {
                cb(err);
            }
            console.log('locations created: ', locations);
        });
  }
问题1 这是进行初始数据库种子设定的正确方法吗

我得到这个错误:

Locations.create(locationsObj, function locationsObj(err, locations) {
          ^
TypeError: Object #<bject> has no method 'create'
Locations.create(locationsObj,函数locationsObj(err,Locations){
^
TypeError:对象#没有“创建”方法
问题2 引导的cb功能是如何工作的? 如果出现错误怎么办?

来自:

“一旦启动Sails应用程序,您的模型将自动可用


在你的例子中,你的第一行覆盖了用户模型,而用户模型是由Sails.js构建的,这就是为什么即使你有一个对象,它也不是水线模型。”

Sails模型是全局可用的;因此你不需要在bootstrap.js上要求

这就是我用来为我的数据库设定种子的方法。(请参阅我随附的链接,以转到GIST)

  • 在config/models.js中包含种子函数。您在此文件中声明的方法将扩展到所有模型。

  • 定义种子将在模型中消耗的数据

  • 使用async调用config/bootstrap.js中的seed方法

  • 更新
    还可以看看这个威胁:

    我知道这是个老问题,但为了完整起见:

    你设定

    var Locations = ...
    
    但是你打电话

    Location.create()
    

    (没有),所以您只需要输入一个错误。

    在config/bootstrap.js中,您可以直接编写种子。请看下面的示例

    await sails.models.role.createEach([
        {
          name: 'Admin',
        },
        {
          name: 'Normal-user',
        },
      ]);
    
    此处的“角色”是所创建表的名称,而不是模型名称


    1)请参阅@Nizar的答案。2)如果有错误,您可以将其作为参数传递给
    cb
    ,这将阻止Sails提升。3)请不要在一篇文章中问两个问题!由于Sails v1.0.x处于回调中,这不包含适配器-提取modelName时中断-可能更新那里的代码?我没有使用Sails很长一段时间。我真的不知道它是如何改变的。我会检查可能比这个答案更好的迁移插件。