Express后端路由运行异常 无法向MongoDB写入数据如何排查?
问题根因
你出现这个问题的核心原因是路由路径重复拼接,没有匹配到预期的POST路由,所以最终落到了根路径/的兜底路由返回OK。
具体分析
app.js中你已经通过app.use('/api/backoffice', backoffice)给backoffice路由组统一加了/api/backoffice前缀- 而
backoffice.js里的POST路由又定义了路径/backoffice,两者拼接后实际可访问的接口路径是POST /api/backoffice/backoffice,不是你预期的POST /api/backoffice - 你用Insomnia请求的路径如果是
/api/backoffice,自然匹配不到任何定义好的业务路由,最后命中兜底的根路由返回OK
修复方案
两种方案选其一即可:
方案1:修改子路由文件的路径
把backoffice.js里的POST路由路径改为/:
// backoffice.js 修改后 const router = require("express").Router(); const Item = require("../models/Item"); // 这里路径改成/,拼接后完整路径就是 POST /api/backoffice router.post('/', (req, res, next) => { console.log(req.body); const {title, description} = req.body; Item.create({ title, description }) .then(response => { console.log(response) res.status(200).json({message: 'New item added succesfully'}) }) .catch(err => res.json(err)) }) module.exports = router;
方案2:修改请求路径
如果你不想改代码,就把Insomnia里的请求路径改成POST /api/backoffice/backoffice即可。
其他注意事项
- 检查你的
config.js里有没有配置express.json()中间件,否则POST请求的req.body会是undefined,无法正常解析提交的参数:// config.js 里需要有这行配置 app.use(express.json()) - 建议给错误响应加500状态码,避免前端把业务错误当成成功响应处理:
.catch(err => res.status(500).json(err))
内容的提问来源于stack exchange,提问作者Lia189
相关产品推荐
相关产品推荐

