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

修改ESLint配置后Postman测试出现Content-Type断言错误求助

问题解决:API请求返回HTML而非JSON的断言错误

软件工程训练营项目中,修改.eslintrc.js并从package.json的devDependencies移除eslint-plugin-react,执行npm install后,所有POST/PUT/DELETE/GET请求均触发Postman断言错误:

Response contains a JSON object | AssertionError: expected 'text/html; charset=utf-8' to include 'application/json'

例如添加name字段长度不符合要求(<2或>30字符)的ClothingItem时,原本正常的验证逻辑现在返回HTML错误而非JSON响应。

  • 检查全局错误处理中间件
    Express默认在捕获未处理错误时会返回HTML页面,确保你在所有路由之后挂载了自定义的JSON错误处理中间件:

    app.use((err, req, res, next) => {
      const statusCode = err.statusCode || 500;
      res.status(statusCode).json({
        message: err.message,
        error: process.env.NODE_ENV === 'production' ? {} : err.stack
      });
    });
    

    注意中间件必须放在所有路由定义之后,否则无法捕获路由抛出的错误。

  • 处理Mongoose验证错误
    在createItem等路由处理函数中,显式捕获Mongoose的ValidationError并返回JSON响应,避免错误被Express默认处理:

    module.exports.createItem = async (req, res, next) => {
      try {
        const item = new ClothingItem(req.body);
        await item.save();
        res.status(201).json(item);
      } catch (err) {
        if (err.name === 'ValidationError') {
          return res.status(400).json({ 
            message: '字段验证失败', 
            details: Object.values(err.errors).map(e => e.message) 
          });
        }
        next(err);
      }
    };
    
  • 排查ESLint配置语法错误
    修改.eslintrc.js后可能存在语法错误,导致服务启动异常但未被正确捕获。执行npm run lint检查配置文件是否合法,或者直接启动服务查看控制台输出的启动错误。

  • 重新安装依赖确保完整性
    移除依赖时可能意外影响了其他核心包,删除node_modules和package-lock.json后重新执行npm install,确保express、mongoose等依赖正确安装。

内容的提问来源于stack exchange,提问作者joshua james

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:17:04