Express如何实现统一格式的自定义JSON响应中间件
实现方案
完全可以通过自定义中间件实现,核心思路是在请求处理流程中提前给res对象挂载统一格式化的响应方法,所有路由直接调用该方法即可,后续要调整格式只需要修改中间件里的逻辑一处就够。
步骤1:编写统一响应中间件
// 自定义响应中间件 const responseFormatter = (req, res, next) => { // 挂载通用响应方法到res对象 res.sendRes = ({ message = '操作成功', type = 'success', payload = null, statusCode = 200 }) => { res.status(statusCode).json({ message, type, payload }) } // 可按需扩展快捷调用方法,减少业务层重复代码 // 成功响应快捷方法 res.success = (payload, message = '操作成功') => { res.sendRes({ payload, message }) } // 失败响应快捷方法 res.fail = (message = '操作失败', payload = null, statusCode = 400) => { res.sendRes({ type: 'error', message, payload, statusCode }) } next() }
步骤2:注册中间件
注意必须在路由注册之前挂载该中间件,才能让所有路由拿到挂载的自定义方法:
const express = require('express') const app = express() // 先注册响应格式化中间件 app.use(responseFormatter) // 再注册业务路由 app.get('/user', (req, res) => { // 成功场景直接调用快捷方法 res.success({ id: 1, username: 'zhangsan' }, '用户信息查询成功') }) app.post('/user', (req, res) => { // 异常场景直接调用失败方法 if (!req.body.username) { return res.fail('缺少必填参数username') } res.success(null, '用户创建成功') })
方案优势
- 响应格式统一收口到中间件维护,后续调整格式、新增字段仅需要修改
sendRes方法一处,无需改动业务路由代码 - 快捷方法减少业务层重复代码,降低参数写错的概率
- 支持自定义状态码、默认参数兜底,兼容各类正常、异常响应场景
内容的提问来源于stack exchange,提问作者Ghost
相关产品推荐
相关产品推荐

