Sails.js:计算模型的最佳实践&x27;api上的属性创建?
假设我有以下模型,那么在Sails.js中,从createapi调用上的一个或多个非持久性属性计算Sails.js:计算模型的最佳实践&x27;api上的属性创建?,sails.js,Sails.js,假设我有以下模型,那么在Sails.js中,从createapi调用上的一个或多个非持久性属性计算sum属性的最佳实践是什么 在此示例中,我希望扩展此模型API的默认创建行为,以接受附加属性valueOne和valueTwo,然后基于简单的valueOne+valueTwo计算sum属性 理想情况下,不丢失模型上其他字段的开箱即用验证,例如name,但不要求在API级别提交sum,同时模型本身仍然需要 api/models/CalculatedData.js module.exports = {
sum
属性的最佳实践是什么
在此示例中,我希望扩展此模型API的默认创建行为,以接受附加属性valueOne
和valueTwo
,然后基于简单的valueOne+valueTwo
计算sum
属性
理想情况下,不丢失模型上其他字段的开箱即用验证,例如name
,但不要求在API级别提交sum
,同时模型本身仍然需要
api/models/CalculatedData.js
module.exports = {
attributes: {
name: {
type: 'string',
required: true
},
sum: {
type: 'integer',
required: true
}
}
};
有很多方法可以做到这一点 如果填充此模型的控制器只有一个,则可以计算控制器中的总和,并将结果传递给模型创建方法 或者你可以找一个服务来帮你。尽管更好的方法是使用自定义模型方法填充模型
module.exports = {
attributes: {
// your attributes
},
customCreate: function (options, cb) {
options.sum = options.values.reduce(function (a, b) {
return a + b;
});
delete options.values;
Model.create(options).exec(cb);
}
};
编辑
更好的方法是在创建之前使用
假设我使用了您在回答中提供的代码片段,我将如何从create API端点(由sails生成)调用它,而不是在模型上调用默认的create方法?嗯,您可以覆盖blueprint create方法,但这将覆盖所有模型。更好的方法可能是使用beforeCreate生命周期回调
module.exports = {
attributes: {
// your attributes
},
beforeCreate: function (options, cb) {
options.sum = options.values.reduce(function (a, b) {
return a + b;
});
delete options.values;
return cb();
}
};