在使用 Sequelize 进行数据库操作时,有时候会遇到 Invalid default value for
的报错。这个报错通常是因为 Sequelize 在创建表时会默认给一些字段设置默认值(如 createdAt 和 updatedAt),但是数据库并不支持这个默认值。这篇文章将介绍如何解决这个报错,让你的 Sequelize 应用顺利运行。
原因分析
Sequelize 在创建表时,会默认给 createdAt 和 updatedAt 字段设置默认值为当前时间。这个默认值通常是通过数据库的函数实现的,例如 MySQL 中的 CURRENT_TIMESTAMP
。但是,有些数据库并不支持这个默认值,例如 SQLite 和 PostgreSQL 就不支持。
当 Sequelize 在这些数据库中创建表时,就会报错 Invalid default value for
。这个报错的原因就是因为数据库不支持 Sequelize 的默认值。
解决方法
解决这个问题的方法很简单,只需要在 Sequelize 中指定 createdAt 和 updatedAt 字段的默认值即可。这个默认值需要和数据库支持的默认值一致,例如在 SQLite 中,可以将默认值设置为字符串 'now'
。
下面是一个使用 Sequelize 创建表的示例代码,其中包含了如何指定 createdAt 和 updatedAt 字段的默认值:
// javascriptcn.com 代码示例 const Sequelize = require('sequelize'); const sequelize = new Sequelize('sqlite::memory:'); const User = sequelize.define('user', { name: Sequelize.STRING, }, { timestamps: true, createdAt: 'created_at', updatedAt: 'updated_at', // SQLite 中使用字符串 'now' // MySQL 中使用函数 Sequelize.literal('CURRENT_TIMESTAMP') // PostgreSQL 中使用函数 Sequelize.fn('now') defaultValue: { created_at: 'now', updated_at: 'now', }, }); sequelize.sync({ force: true }) .then(() => { console.log('Table created!'); });
在上面的代码中,我们使用了 defaultValue
选项来指定 createdAt 和 updatedAt 字段的默认值。在 SQLite 中,我们将默认值设置为字符串 'now'
,在其他数据库中,可以使用相应的数据库函数来实现。
总结
Sequelize 报错 Invalid default value for
是由于 Sequelize 在创建表时默认给字段设置了默认值,但是数据库并不支持这个默认值。解决这个问题的方法是在 Sequelize 中指定 createdAt 和 updatedAt 字段的默认值,使其与数据库支持的默认值一致。在 SQLite 中,可以将默认值设置为字符串 'now'
,在其他数据库中,可以使用相应的数据库函数来实现。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6583ecbed2f5e1655deb88d8