如何在Express.js中当请求体JSON无效时返回400响应
解决Express无效JSON请求体返回400而非抛错的问题
你可以通过两种方式实现需求:
方式一:给express.json()配置验证函数
直接在express.json()的选项里加verify参数,捕获解析错误并主动返回400响应:
import express from 'express' const app = express() app.use(express.urlencoded({ extended: false })) // 自定义JSON解析的验证逻辑 app.use(express.json({ verify: (req, res, buf) => { try { JSON.parse(buf) } catch (err) { res.status(400).json({ error: '无效的JSON格式' }) throw err // 抛出错误让Express后续处理,也可直接调用res.end()结束响应 } } }))
方式二:添加全局错误处理中间件
如果不想修改express.json()的配置,可以在所有路由之后添加全局错误处理中间件,专门捕获JSON解析错误:
import express from 'express' const app = express() app.use(express.urlencoded({ extended: false })) app.use(express.json()) // 你的其他路由定义... // 全局错误处理中间件 app.use((err, req, res, next) => { // 判断是否是JSON解析错误 if (err instanceof SyntaxError && err.status === 400 && 'body' in err) { return res.status(400).json({ error: '请求体不是有效的JSON格式' }) } // 其他错误交给默认处理逻辑 next(err) })
两种方式都能实现当请求体是无效JSON时,返回400状态码和自定义错误信息,而非直接抛出未处理的错误。
内容的提问来源于stack exchange,提问作者kennarddh
相关产品推荐
相关产品推荐

