修改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
相关产品推荐
相关产品推荐

