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

在Express.js请求处理函数中修改app设置是否为良好开发实践?

在Express.js的请求处理程序中修改应用设置是否属于良好的开发实践?

这种做法不属于良好开发实践,是应该严格规避的错误写法。

存在的核心问题

  • 全局配置共享导致污染:Express的app.set存储的是应用级别的全局配置,所有请求共享同一个app实例。在单个请求处理逻辑中修改全局配置,会影响所有后续请求的运行逻辑,完全不满足不同请求之间的隔离要求。比如示例代码中只要有一次请求访问了/somehow路由,所有其他路由获取app.get('title')的结果都会变成New title。
  • 并发场景触发竞态问题:如果有多个请求同时修改同一个全局配置,最终的配置值完全取决于请求的执行时序,会出现不可预期的运行结果,这类竞态bug极难复现和排查。
  • 不符合框架设计约定:Express的app设置本身设计为启动阶段初始化的固定配置,运行时动态修改属于超出设计预期的用法,后续框架版本升级很可能出现兼容性问题。

正确实现方案

如果需要存储和当前请求相关的自定义变量,直接挂载到req对象即可,不会影响其他请求:

var express = require('express')
var app = express()
// 全局配置仅在应用启动、监听端口之前完成设置
app.set('title', 'My Site')

app.get('/somehow', function (req, res) {
  // 单个请求的自定义变量挂载到req对象,仅当前请求可见
  req.customTitle = 'New title'
  // 如果是要传递给视图模板的变量,也可以使用官方提供的res.locals
  res.locals.title = 'New title'
  res.send('hello world')
})

app.listen(3000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:24:01