sails.js - UUID作为sailsjs域中的主键
问题描述
我正在使用 Sails.js 版本 1.0.2。我正在尝试将 uuid 分配为整个应用程序的主键。我尝试放入
id: { type: 'string', defaultsTo:uuid.v4() }
model.js 但它说主键必须是唯一的,因此不能包含默认值。
_________________编辑_______________
我在我的域中尝试了此代码
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
如果我做错了什么,请告诉我。
谢谢
解决方案
你可以做这样的事情而不是给出默认值
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();
}
我的控制器和模型的示例代码,
测试控制器.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 引用
推荐阅读
- python - 使用 Python 删除 html 标签及其内容
- javascript - rewire.js 的问题 - 错误:找不到模块
- scala - 将 Map 键作为参数传递给 Java varags 方法
- amazon-web-services - 使用 Amazon SES 构建营销电子邮件系统
- c# - 在WPF应用程序中运行exe应用程序,Command和Click之间的区别?
- excel - 将所有工作表复制到新工作簿时出现 Excel 运行时错误
- python - 检查一行上的日期是否早于下一行的另一个日期
- javascript - Vue 3 innerHTML attr 不呈现任何内容
- flutter - 如何在 Flutter 上的 StreamBuilder 之前调用 Future 方法?
- c# - 并非所有代码路径都在我的控制器方法中返回值