统一封装node.js接口响应格式需用中间件或拦截器:express中挂载自定义response中间件并约定res.success/fail调用;koa中通过顶层中间件自动包装ctx.body;nestjs则用transforminterceptor全局拦截并标准化返回结构。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Cursor中开发Node.js项目时,需要让所有接口返回结构一致的JSON数据,避免前端反复适配不同格式的响应体,比如有的返回{ data: ... },有的直接返回原始数据,有的带code、msg,有的不带。
用Express中间件统一封装响应
第一步:在app.js或主入口文件顶部引入自定义响应中间件。
第二步:创建middleware/response.js,导出一个函数,接收res对象并挂载success、fail等方法。
第三步:在路由处理函数中不再直接调用res.json(),改用res.success(data)或res.fail(msg, code)。这能强制所有业务逻辑走同一出口,避免漏写状态码或包裹字段。
注意:中间件必须在所有路由注册之前使用app.use()挂载,否则res.success方法不可用。
用Koa洋葱模型实现响应拦截
方法一:在app.use()最外层写一个异步中间件,捕获后续中间件通过ctx.body设置的值。
方法二:约定所有控制器返回一个标准对象{ code: 0, msg: 'ok', data: ... },然后在顶层中间件里判断ctx.body类型——如果是普通对象且不含code字段,就自动包装成标准格式。
方法三:直接修改ctx.response.status和ctx.body,但【不要覆盖已设置的status】,否则404、500会被强行改成200。
用装饰器(TypeScript + NestJS)声明式统一格式
安装@nestjs/common后,在main.ts中配置全局过滤器和拦截器:
app.useGlobalInterceptors(new TransformInterceptor());
创建transform.interceptor.ts,在intercept()中对returnValue做标准化包装:空值转{ data: null },错误抛出则由全局异常过滤器接管,正常返回一律加code: 0和msg: 'ok'。
这一步不需要改任何控制器代码,所有@Get()、@Post()路由自动生效。











