使用Sequelize(Postgres)按ID查询用户无返回或报错,求解决方案
问题解决:Sequelize查询用户ID报错或无结果
错误原因
- 直接把
id值传给where选项,不符合Sequelize的语法规范。Sequelize要求where必须是键值对对象来指定查询条件,而非单个原始值,这就是触发“Support for {where: 'raw query'} has been removed.”错误的原因。 - 若
req.body.id未正确获取到值(比如前端传参错误),还会导致查询无返回结果。
修复后的代码
async findOne(req,res) { try { const {id} = req.body; console.log(id); // 修正where选项为键值对对象,匹配数据库字段名 const user = await User.findOne({where: { id }}) return res.json({user}); } catch (e) { console.log(e.message); // 建议给前端返回错误响应,方便排查问题 return res.status(500).json({error: e.message}); } } router.post('/getOne', userController.findOne);
额外提示
- 确认
req.body.id的类型和数据库中id字段类型一致(比如数据库存整数,前端别传字符串,若Sequelize配置了自动类型转换则无需担心)。 - 如果是通过URL路径传ID(比如
/getOne/123),建议改用req.params.id获取参数,更符合RESTful接口设计习惯。
内容的提问来源于stack exchange,提问作者Andrey Smith
相关产品推荐
相关产品推荐

