我正在使用Sails.js版本1.0.2。我试图在整个应用程序中将uuid指定为主键。我试过把
在model.js中id: { type: 'string', defaultsTo:uuid.v4() }
,但它说主键必须是唯一的,因此不能包含默认值。
_________________ EDIT _______________
我在我的域中尝试了此代码
beforeCreate: function (modelObj, next) {
modelObj.id = uuidv4.v4();
next();
}
编辑我的Model.js配置就像:
attributes: {
createdAt: { type: 'number', autoCreatedAt: true, },
updatedAt: { type: 'number', autoUpdatedAt: true, },
id: { type: 'string',required:true},
}
beforeCreate方法永远不会执行,并在创建记录时抛出错误,如:
error: Sending 500 ("Server Error") response:
{ UsageError: Invalid new record.
Details:
Missing value for required attribute `id`. Expected a string, but
instead, got: undefined
如果我做错了,请告诉我。
由于
答案 0 :(得分:1)
您可以执行此类操作,而不是提供默认值
beforeCreate: function (modelObj, next) {
modelObj.id = uuid.v4();
next();
}
您可以在模型中添加此功能。只要模型上有创建操作,就会调用它。
您的 Model.js 看起来应该是这样的
attributes: {
createdAt: { type: 'number', autoCreatedAt: true, },
updatedAt: { type: 'number', autoUpdatedAt: true, },
id: { type: 'string',required:true},
},
beforeCreate: function (modelObj, next) {
modelObj.id = uuid.v4();
next();
}
我的控制器和模型的示例代码,
<强> TestController.js 强>
module.exports = {
create: function(req, res) {
Test.create({"name": "arshad"})
.then(function(result){
res.send("done");
})
}
};
Test.js 型号
module.exports = {
attributes: {
id: { type: 'string', required: true },
name: { type: 'string' }
},
beforeCreate: function(obj, next) {
obj.id = 'someId';
next();
}
};
这就是你的模型和控制器的样子。这会将beforeCreate函数中定义的 someId 添加到对象
在您的情况下,您使用的是uuid包。检查调试模式是否在beforeCreate中可用的uuid引用