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

NodeJS中变量无法在每次请求时重置的问题咨询

为什么Express控制器中的变量会在请求间累加而不重置?

问题场景

我用TypeScript-Node-Starter搭建项目,创建了控制器与路由调用对应函数,代码如下:

import { Request, Response } from "express";
import axios from "axios";
import { parseString } from "xml2js";

let box = 0;

export const index =  (req: Request, res: Response) => {     
     box++;
     res.send(JSON.stringify(box));
};

通过npm run watch-node启动服务器后,访问http://localhost:3000/upwork首次返回1,多次刷新后数值持续累加,想知道为什么变量无法在每次请求时重置。

原因分析

box是声明在模块作用域的变量,Node.js的模块加载机制是单例模式——服务器启动时这个模块只会被加载一次,box的初始化(let box = 0)也只会执行一次。之后所有的请求都会共享同一个box变量,每次调用index函数都会对它做自增操作,所以数值会持续累加。

解决方案

根据你的需求选择对应的方案:

  • 每次请求都重置为0:把变量移到控制器函数内部,这样每次请求进入函数时都会创建一个新的box变量:
    export const index =  (req: Request, res: Response) => {     
         let box = 0;
         box++;
         res.send(JSON.stringify(box));
    };
    
  • 按用户/会话保持状态:如果需要针对不同用户维护独立的数值,使用Express的session机制或者其他会话存储方案,把状态存在用户会话中。
  • 全局统计请求次数:如果你的需求本来就是统计该接口的总请求次数,那当前的写法是正确的,不需要修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:22:38