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

如何实现返回状态与JSON的结构化响应接口?能否扩展Express?

扩展Express响应以统一返回指定结构

完全可以通过扩展Express的Response对象来实现这个需求,以下是具体实现步骤:

1. 扩展Express的类型定义(TypeScript)

创建类型声明文件(比如types/express/index.d.ts),让TypeScript识别我们的自定义响应方法:

import { ObjectResponseInterface } from '../path/to/your/interface';

declare global {
  namespace Express {
    interface Response {
      sendCustomResponse: (objRes: ObjectResponseInterface) => void;
    }
  }
}

2. 实现自定义响应中间件

编写中间件,给Express的Response对象添加自定义方法:

import { Request, Response, NextFunction } from 'express';
import { ObjectResponseInterface } from '../path/to/your/interface';

export const customResponseMiddleware = (req: Request, res: Response, next: NextFunction) => {
  res.sendCustomResponse = (objRes: ObjectResponseInterface) => {
    res.status(objRes.status).json(objRes);
  };
  next();
};

3. 注册中间件并使用

在Express应用中注册中间件,之后所有路由都可以直接调用自定义方法返回统一结构:

import express from 'express';
import { customResponseMiddleware } from './middlewares/customResponse';
import { ObjectResponseInterface } from './path/to/your/interface';

const app = express();

// 全局注册中间件(需在路由之前)
app.use(customResponseMiddleware);

// 示例路由
app.get('/api/data', (req, res) => {
  const response: ObjectResponseInterface = {
    status: 200,
    error: false,
    response: { list: ['item1', 'item2'] }
  };
  // 直接调用自定义方法
  res.sendCustomResponse(response);
});

app.listen(3000, () => console.log('Server running on port 3000'));

补充说明

  • 自定义方法sendCustomResponse会自动帮你完成res.status(objRes.status).json(objRes)的操作,避免重复代码
  • 类型扩展保证了TypeScript的类型检查和代码提示,不会出现类型报错
  • 中间件是全局生效的,所有路由都能直接使用这个方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:30:42