node.js - Sequelize where-clause 运算符不产生预期的输出

标签 node.js sequelize.js

我正在为使用 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/

    相关文章:

    node.js - Nodejs Express 应用程序,传播错误

    javascript - Sequelize - 创建包含时的外键返回 null

    node.js fs 重命名 ENOENT

    javascript - Express文件上传内存问题

    node.js - Cypress 间歇性无法验证基本 url 是否正在运行

    javascript - 删除 Sequelize 迁移中的约束

    mysql - 序列混合错误

    sequelize.js - 未处理的拒绝类型错误 : Dependency name must be given as a not empty string

    sql - 别名后的外连接中不存在该列

    php - XAMPP + Laravel + AdminLTE