我正在为使用 Sequelize 在 NodeJS 中构建的应用程序构建密码重置功能。
当用户输入新密码并提交时,我使用以下代码查询数据库以查找用户:
const user = await User.findAll({ where:
{
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt: Date.now() }
}
});
但是,此条目生成的查询如下(从终端复制,我为不相关的元素添加了“...”):Executing (default): SELECT ... `resetPasswordToken`, `resetPasswordExpires` FROM `users` AS `user` WHERE `user`.`resetPasswordToken` = ... AND `user`.`resetPasswordExpires` = '2020-08-09 04:00:00';
运行此查询的当前日期时间是:'2020-08-09 14:24:40',这让我感到困惑,为什么这个 Sequelize 查询被翻译成“= '2020-08-09 04:00:00'”。结果是查询不匹配任何用户,即使它应该匹配一个。
我的问题如下:
谢谢你的帮助!
-彼得
最佳答案
不幸的是,新版本的 sequelize 不再支持运算符别名 ($gt)。使用 [Op.gt] 而不是 $gt
尝试:
const user = await User.findAll({ where:
{
resetPasswordToken: req.params.token,
resetPasswordExpires: { [Op.gt]: Date.now() }
}
});
https://sequelize.org/master/manual/model-querying-basics.html#operators
关于node.js - Sequelize where-clause 运算符不产生预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63327610/