有一个模型,所有其他模型都假设它存在。 它应该在调用任何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 功能如何工作? 如果出现错误怎么办?
答案 0 :(得分:10)
帆模型全球可用;所以你不需要在bootstrap.js。
这是我用来为我的数据库设定种子的方法。 (请参阅我附上的链接以获取要点)
在config / models.js中包含种子功能。您在此文件中声明的方法将扩展到您的所有模型。 Link: Seed method gist
定义种子将在模型中使用的数据Link: Model's seed data
使用async调用config / bootstrap.js中的种子方法。 Link: Calling method
还要看看这个威胁: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”是创建的表的名称,而不是模型名称。