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

如何在Express.js中自动为res.send()返回值追加loggedin键值对?

实现接口返回结果自动添加loggedin字段的方案

最简洁高效的方式是用Express的自定义中间件,拦截响应发送逻辑,自动给返回数据追加loggedin字段,不用逐个修改路由代码。

步骤1:编写自定义中间件

这个中间件会包装res.send方法,在发送响应前自动处理数据:

// 自定义中间件:自动为响应添加loggedin字段
const addLoggedInField = (req, res, next) => {
  // 保存原始的res.send方法
  const originalSend = res.send;

  res.send = function(data) {
    // 替换成你项目中实际的登录判断逻辑
    // 示例:从session/token校验用户是否登录,这里暂时设为true
    const isLoggedIn = true; 

    let responseData;
    // 处理不同类型的返回数据
    if (typeof data === 'object' && data !== null) {
      // 直接给对象追加字段
      responseData = { ...data, loggedin: isLoggedIn };
    } else if (typeof data === 'string') {
      // 如果是JSON字符串,解析后追加字段再转回去
      try {
        responseData = JSON.parse(data);
        responseData.loggedin = isLoggedIn;
        responseData = JSON.stringify(responseData);
      } catch (err) {
        // 非JSON字符串直接返回原数据
        responseData = data;
      }
    } else {
      // 其他类型(数字、布尔等)直接返回原数据
      responseData = data;
    }

    // 调用原始send方法返回处理后的数据
    return originalSend.call(this, responseData);
  };

  next();
};

步骤2:应用中间件

可以选择全局应用(给所有接口加),或者给指定路由应用:

export const indexRouter = express.Router();

// 给当前路由的所有接口应用中间件
indexRouter.use(addLoggedInField);

indexRouter.get('/', (_, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.send({ message: 'HI' });
});

补充说明

  • 如果你的项目常用res.json返回数据,只需把中间件里的res.send换成res.json,逻辑完全一致。
  • isLoggedIn的判断逻辑要替换成你项目的实际校验方式,比如从req.session.user、req.headers.authorization(token)等判断用户是否已登录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:35:49