You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:45:01