关于dresende / node-orm 在Nodejs中的使用问题
关于dresende / node-orm 在Nodejs中的使用问题
诸位好,我在使用dresende / node-orm 去连接Mysql的时候,出现了日期不能读出的问题: 我在Mysql中存有一条记录,其中有个DateTime类型的字段:1888-08-08 12:12:12 ,然后我用node-orm读出来以后,再保存,就把数据库中的记录覆盖成了 0000-00-00 00:00:00,再次读出就成为了Invalid Date,请问各位有没有遇到这种问题? 附上node-orm的git地址https://github.com/dresende/node-orm/ 另外,如果有更好的orm,已经在用的,可否推荐一下,谢谢!
关于 dresende/node-orm
在 Node.js 中的使用问题
你好,你在使用 dresende/node-orm
连接 MySQL 数据库时遇到了日期无法正确读取的问题。这可能是因为 node-orm
对日期类型的处理不够完善。以下是一些可能的解决方案和替代方案。
解决方案
首先,确保你已经安装了 node-orm
和 MySQL 驱动:
npm install node-orm mysql
然后,你可以尝试手动处理日期格式,以确保它们能够正确读取和写入数据库。例如,可以使用 moment
或 date-fns
等库来处理日期格式。
示例代码:
const orm = require('node-orm');
const moment = require('moment');
// 连接到 MySQL 数据库
orm.connect({
datasource: 'mysql',
hostname: 'localhost',
database: 'testdb',
username: 'root',
password: 'password'
}, function (err, db) {
if (err) throw err;
// 定义模型
db.define('mytable', {
id: { type: 'serial', key: true },
date_field: { type: 'datetime' }
});
// 查询数据
db.models.mytable.find({ where: { id: 1 } }, function (err, records) {
if (err) throw err;
// 手动处理日期格式
records.forEach(record => {
const originalDate = record.date_field;
const formattedDate = moment(originalDate).format('YYYY-MM-DD HH:mm:ss');
console.log(`Original Date: ${originalDate}`);
console.log(`Formatted Date: ${formattedDate}`);
// 更新记录
record.date_field = formattedDate;
record.save(function (err) {
if (err) throw err;
console.log('Record updated successfully');
});
});
});
});
在这个示例中,我们使用 moment
库来格式化日期,确保日期在读取和保存时不会被错误地转换为无效日期。
替代方案
如果你发现 dresende/node-orm
的日期处理问题难以解决,可以考虑使用其他 ORM 库,例如 sequelize
或 typeorm
。这些库提供了更强大的功能和更好的社区支持。
Sequelize 示例:
npm install sequelize mysql2
const Sequelize = require('sequelize');
const sequelize = new Sequelize('testdb', 'root', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const MyTable = sequelize.define('mytable', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
date_field: { type: Sequelize.DATE }
}, {
timestamps: false
});
sequelize.sync().then(() => {
return MyTable.findOne({ where: { id: 1 } }).then(record => {
console.log(`Original Date: ${record.date_field}`);
record.date_field = new Date(record.date_field);
return record.save();
});
});
通过这些示例,你可以更好地理解如何处理日期问题,并选择更适合你的项目需求的 ORM 库。希望这些信息对你有所帮助!
木有人给点建议吗。。
new Date() //不是只用 Date()
你保存之前得查一下,不能把无效数据存回去。
没用过 node-orm
感谢回复,我那时用的是new Date()。 那个node-orm我用的时候有好多问题,看他更新也不是很勤快,后来就没用了
谢谢回复。我没改过那些字段,是指读取-》保存-》读取-》保存。 后来不用mysql和node-orm了。 你一般node读写mysql的时候用什么工具啊?
mysql orm 不如用一下这个…用的人多…bug 修复得也快… https://github.com/sequelize/sequelize
恩,听过。后来用mongo后就没关注了。
好的。