SailsJS最佳实践是在初始化其他模型之前使用数据对数据库进行种子设定

时间:2014-04-08 15:40:11

标签: 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 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'

问题2 bootstrap的 cb 功能如何工作? 如果出现错误怎么办?

3 个答案:

答案 0 :(得分:10)

帆模型全球可用;所以你不需要在bootstrap.js。

这是我用来为我的数据库设定种子的方法。 (请参阅我附上的链接以获取要点)

  1. 在config / models.js中包含种子功能。您在此文件中声明的方法将扩展到您的所有模型。 Link: Seed method gist

  2. 定义种子将在模型中使用的数据Link: Model's seed data

  3. 使用async调用config / bootstrap.js中的种子方法。 Link: Calling method

  4. UPDATE

    还要看看这个威胁:Best way to migrate table changes to production sailsjs tables

答案 1 :(得分:2)

来自Cannot unit test my model in sailsjs

“一旦Sails应用程序解除,您将自动提供模型......

在你的情况下,你的第一行会覆盖由Sails.js构建的User模型,这就是为什么即使你有一个对象它也不是Waterline模型。“

答案 2 :(得分:0)

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

await sails.models.role.createEach([
    {
      name: 'Admin',
    },
    {
      name: 'Normal-user',
    },
  ]);

此处“ role”是创建的表的名称,而不是模型名称。