Waterline error: “Unknown rule: default”
在模型上调用
型号:
1 2 3 4 5 6 7 8 | attributes: { user : { type: 'integer' }, number : { type: 'string' } } |
致电:
1 2 3 4 5 | sails.models.phone.create({ user: 2, number: '5555555555', updated_at: Sun Nov 27 2016 16:59:45 GMT-0800 (PST) }); |
错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Unknown rule: default at Object.matchRule (/Developer/repos/bond/api/node_modules/waterline/node_modules/anchor/lib/match/matchRule.js:38:11) at Anchor.to (/Developer/repos/bond/api/node_modules/waterline/node_modules/anchor/index.js:106:48) at afterwards (/Developer/repos/bond/api/node_modules/waterline/lib/waterline/core/validations.js:229:41) at /Developer/repos/bond/api/node_modules/async/lib/async.js:52:16 at Object.async.forEachOf.async.eachOf (/Developer/repos/bond/api/node_modules/async/lib/async.js:236:30) at Object.async.forEach.async.each (/Developer/repos/bond/api/node_modules/async/lib/async.js:209:22) at _eachValidation (/Developer/repos/bond/api/node_modules/waterline/lib/waterline/core/validations.js:189:11) at /Developer/repos/bond/api/node_modules/async/lib/async.js:181:20 at Object.async.forEachOf.async.eachOf (/Developer/repos/bond/api/node_modules/async/lib/async.js:233:13) at Object.async.forEach.async.each (/Developer/repos/bond/api/node_modules/async/lib/async.js:209:22) at Validator.validate (/Developer/repos/bond/api/node_modules/waterline/lib/waterline/core/validations.js:144:9) at /Developer/repos/bond/api/node_modules/waterline/lib/waterline/query/validate.js:42:25 at /Developer/repos/bond/api/node_modules/async/lib/async.js:718:13 at Immediate.iterate [as _onImmediate] (/Developer/repos/bond/api/node_modules/async/lib/async.js:262:13) at processImmediate [as _immediateCallback] (timers.js:383:17) |
我该如何解决?
我研究了类似的错误,但是我的模型都没有
解决方案
因此事实证明,
我之前的无效代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | createOrUpdate: function(model, primary, data){ return model.update(primary, data) .then(function updateCB(updated){ if (updated.length == 0){ return model.create(data) //data here had an added updated_at field .then(function(created){ return created; }); } if (updated.length > 0){ updated = updated[0]; } return updated; }); } |
有效的新代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | createOrUpdate: function(model, primary, data){ const data1 = JSON.parse(JSON.stringify(data)); // deep copy const data2 = JSON.parse(JSON.stringify(data)); // deep copy return model.update(primary, data1) .then(function updateCB(updated){ if (updated.length == 0){ return model.create(data2) .then(function(created){ return created; }); } if (updated.length > 0){ updated = updated[0]; } return updated; }); } |
您不能通过以下方式致电更新:
1 | updated_at: Sun Nov 27 2016 16:59:45 GMT-0800 (PST) |
Updated_at是自动填写的字段。从请求中删除它(调用时称为调用),它将起作用。