Javascript 吃水线错误:“;未知规则:默认值;

Javascript 吃水线错误:“;未知规则:默认值;,javascript,sails.js,waterline,Javascript,Sails.js,Waterline,在模型上调用.create()时出现以下错误 型号: attributes: { user : { type: 'integer' }, number : { type: 'string' } } 电话: 错误: Unknown rule: default at Object.matchRule (/Developer/repos/bond/api/node_modules/waterline/node_modules/anc

在模型上调用
.create()
时出现以下错误

型号:

attributes: {
    user : {
      type: 'integer'
    },
    number : {
      type: 'string'
    }
  }
电话:

错误:

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)
如何解决此问题?

我已经研究过了,但是我的所有型号都没有
default
属性,包括上面显示的
phone
型号。为什么会发生这种情况,我该如何解决


解决方案

因此,对
.update()
的水线调用改变了输入信息。我写了一个函数来创建或更新水线模型,当他们修复了水线模型时,他们一定修改了传入的信息

我以前的代码不起作用:

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;
  });
}
我的新代码确实有效:

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;
  });
}

您不能使用以下命令调用更新:

updated_at: Sun Nov 27 2016 16:59:45 GMT-0800 (PST) 

更新的_at自动填充在字段中。从请求中删除它(按您的要求调用),它就会工作。

创建后的列名是
updatedAt
。感谢您捕捉到这一点!事实上,我没有手动调用该字段,所以我没有注意到它。现在修好了!查看我的补充解决方案,了解为什么我会如此困惑,因为这已经工作了几个月。我会跟水线队提出来的。
updated_at: Sun Nov 27 2016 16:59:45 GMT-0800 (PST)