Sails.js模型updatedAt(updated_at)不自动更新

smi*_*ham 3 javascript sails.js waterline

预期行为:

使用.update()成功更新记录后,记录的updated_at字段应自动更新为当前时间.

注意:我在config.models中更改了autoUpdatedAt设置(此处也提到)autoUpdatedAt: 'updated_at',因此该字段的标题updated_at不是updatedAt.它应该仍然具有我假设的相同功能.

实际行为:

模型已成功更新,但不会更新该updated_at字段.

代码运行:

model.update(primary, data)
.then(function updateCB(updated){
  // error handling
  sails.log('Updated successfully');
  sails.log(updated);
});
Run Code Online (Sandbox Code Playgroud)

问题:

  • 为什么是这样?
  • 我该如何解决?

结果:Sails问题

我能够在一个新项目中重现它,所以它看起来像是帆的问题.问题链接:https://github.com/balderdashy/sails/issues/3821

有关详细信息,请参阅下面的答案.

Rya*_*yan 5

我无法回答'为什么'我尝试了同样的事情并遇到了同样的问题.至于如何解决它 -

我在我的模型文件中为我想要的任何模型创建了一个属性并将其填充如下:

    updated_at:{
        type: 'datetime',
        defaultsTo: function(){return new Date();}
    }
Run Code Online (Sandbox Code Playgroud)

在我的DB(在这种情况下,MySQL的)列被设置为NOT NULLDATETIME,并设置更新CURRENT_TIMESTAMP on UPDATE.

如果您在更新调用之前无权访问数据库,也可以将其放入代码中:

data.updated_at = new Date();
model.update(primary,data)....
Run Code Online (Sandbox Code Playgroud)

这将完成同样的事情.

这是我能够提出的最简单的工作.

我想到了这个,我想出了第三个选项,一个类似的模型方法:

attributes:{
    //stuffs
},
beforeUpdate: function(obj, next){
    obj.updated_at = new Date();
    return next(null, obj);
}
Run Code Online (Sandbox Code Playgroud)

null在第一个位置是因为据我可以告诉帆预计的error整个调用链对象,所以如果我通过什么沿着那么整个事情crapped了.