You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SailsJS自动更新createdAt/updatedAt配置问题求助

解决Sails.js自动更新createdAt/updatedAt字段的问题

嘿,我帮你梳理下问题所在,其实核心是字段类型不匹配以及模型配置的优先级问题,咱们一步步来修复:

1. 修正字段类型匹配问题

你的MySQL表中createdAt和updatedAt是DATETIME类型,但在模型和全局配置里都把它们设成了number类型——这就导致Sails没法正确映射和自动更新这些字段。Sails的autoCreatedAt和autoUpdatedAt默认会生成数字时间戳,但如果你的数据库字段是DATETIME,得把模型里的类型改成datetime(Sails v1+直接支持这个类型)。

修改你的Users.js模型:

module.exports = {
  tableName: 'users',
  primaryKey: 'id',
  attributes: {
    id: { type:'number', unique:true, autoIncrement:true },
    name: { type:'string' },
    email: { type:'string' },
    password: { type:'string' },
    profilePicture: { type:'longtext' },
    location: { type:'string' },
    createdAt: { type: 'datetime', autoCreatedAt: true }, // 匹配数据库类型+开启自动填充
    updatedAt:{ type: 'datetime', autoUpdatedAt: true }   // 同样配置
  }
};

2. 调整全局与模型的配置优先级

Sails里模型级别的配置会覆盖全局config/model.js的配置。你在全局里加了autoCreatedAt: true和autoUpdatedAt: true,但如果模型里的字段类型不匹配,或者没明确开启这些属性,就不会生效。

你有两种选择:

  • 方案一:依赖全局配置,确保全局和模型类型一致
    修改config/model.js:

    migrate: 'safe',
    attributes: {
      createdAt: { type: 'datetime', autoCreatedAt: true },
      updatedAt: { type: 'datetime', autoUpdatedAt: true },
      id: { type: 'number', autoIncrement: true },
    },
    

    然后模型Users.js里可以删掉createdAt和updatedAt的定义,让全局配置直接生效;或者保留定义但和全局保持一致。

  • 方案二:单独在模型里配置,不依赖全局
    就是上面修改模型的代码,直接在模型字段里加上autoCreatedAt和autoUpdatedAt,这样更灵活,适合不同模型有不同配置的场景。

3. 关于已存在的数据库表

完全不用纠结这个!Sails的自动更新字段功能根本不要求表是Sails创建的——只要字段存在、类型匹配、配置正确,就能正常生效。你之前的问题和表的创建来源无关,就是类型和配置的小问题。

4. 验证修复

改完配置后重启Sails服务,尝试创建或更新一个用户条目,然后去MySQL里看看createdAt和updatedAt是不是自动填充/更新了。如果还是有问题,可以检查:

  • 数据库用户有没有该表的读写权限
  • 确认migrate: 'safe'不会影响这个功能——它只是禁止Sails自动修改表结构,完全不影响业务逻辑里的自动字段填充

内容的提问来源于stack exchange,提问作者MarkusAfricanus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:42:22