Sequelize执行用户查询返回Invalid value错误的原因是什么?
错误原因
你遇到的报错核心是Op操作符的导入方式错误,导致代码中使用的Op.and不是Sequelize预设的合法操作符:
默认从sequelize包导入的默认对象是Sequelize构造函数,而非操作符集合,此时Op.and为无效值,你的where条件实际会被解析为包含无效字段的结构,Sequelize将后续的{ username: 'user' }对象当成字段值做转义处理时就会抛出Invalid value错误。
修复方案
方法1:修正Op的导入语句
将查询代码中的导入行修改为解构导入操作符集合:
// 错误写法 import Op from "sequelize"; // 正确写法 import { Op } from "sequelize";
方法2:简化查询逻辑(可选)
你的查询场景是多条件逻辑与,Sequelize的where对象默认就是逻辑与关系,完全可以省略Op.and的显式声明,代码更简洁也能规避操作符导入错误:
db.models.user .findOne({ where: { username: "user", password: hashedPwd }, })
额外说明
你当前直接比对hash后的密码的逻辑是可行的,因为password字段的setter仅在写入数据时触发,查询阶段不会影响传入的hash值比对。
内容的提问来源于stack exchange,提问作者slightly_toasted
相关产品推荐
相关产品推荐

