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

Node.js动态require语言文件高并发下失效问题求助

问题根源与解决方案

这个问题的核心原因是你使用了全局变量lang来存储语言配置,而Node.js是单线程事件循环模型,全局变量是所有请求共享的资源。当大量请求并发进来时,后续请求会覆盖之前请求设置的lang值,导致语言配置串位,自然就无法正确返回对应语言的响应了。

修复步骤

  1. 放弃全局变量,将语言配置挂载到请求对象req上
    每个HTTP请求都会生成独立的req和res对象,把语言配置绑定到当前请求的req上,就能保证每个请求的语言配置互不干扰。

修改你的中间件代码如下:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(function(req, res, next) { 
  // 注意:这里的'ar'和'en'要加引号,避免被当成未定义的变量
  var language = req.headers['accept-language'] === 'ar' ? 'ar' : 'en'; 
  // 将语言配置挂载到req对象,而非全局
  req.lang = require('./server/lang/' + language); 
  next(); 
});
  1. 在路由中使用req.lang获取语言配置
    后续处理请求时,直接从当前请求的req对象中获取对应的语言配置即可,示例:
app.get('/api/greet', (req, res) => {
  res.json({ message: req.lang.greeting });
});

额外说明

  • Node.js的require函数会缓存模块,所以多次加载同一个语言文件(比如ar.js)不会重复读取磁盘,性能上完全不用担心。
  • 你原来的代码里还有个小问题:ar和en没有加引号,这会被JS解释为变量,如果没有提前定义这两个变量,会直接抛出ReferenceError,一定要修正为字符串形式哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:00:17