Express路由/:id调用Sequelize findByPk()返回空对象问题排查
问题排查与修复
核心错误:findByPk 参数使用错误
你当前代码里的 findByPk 调用不符合 Sequelize 的 API 规范:
const oneCategory = await Category.findByPk({ include: [{ model: Product }] });
findByPk 的第一个参数必须是要查询的主键值(即 URL 中的 :id),查询选项(比如 include)需作为第二个参数传入。你未传入主键 ID,Sequelize 无法定位具体分类,因此返回空对象。
修复后的代码
router.get('/:id', async (req, res) => { try { // 正确传递主键ID和查询选项 const oneCategory = await Category.findByPk(req.params.id, { include: [{ model: Product }] }); if (!oneCategory) { res.status(404).json({ message: 'No category found with that id!' }); return; } res.status(200).json(oneCategory); } catch (error) { res.status(500).json(error); } });
额外检查点
- 确认
Category和Product模型已正确定义关联(比如Category.hasMany(Product)和Product.belongsTo(Category)),否则include无法加载关联的产品数据。 - 验证 Insomnia 请求的 URL 已传入正确 ID(例如
GET /categories/1,而非仅/categories/)。 - 可取消注释
console.log(oneCategory),在控制台查看查询结果,进一步排查关联数据未加载的问题。
内容的提问来源于stack exchange,提问作者Anakela
相关产品推荐
相关产品推荐

