在请求期间设置的全局变量是否会在不同的请求之间泄漏?

问题描述 投票:0回答:1

如果在处理请求期间设置了全局变量,是否可以将该信息泄漏到后续请求中?

也就是说,全局变量是在every请求上设置的,并且因为nodejs是单线程的,所以我think我很安全,但是我想在这里提高信心。

这是我的上下文:我正在构建一个进行服务器端渲染的前端服务(Typescript + React),我想按请求配置应用程序。

为此,我正在使用这种技术:

conf.ts

let CONFIG: any
export function setGlobal (state: any): void {
  CONFIG = state
}

export function getGlobal(): any {
  return CONFIG
}

[server.tsx-配置Express应用的位置:

const app = express()

app.get("/*", htmlEndpoint)

function htmlEndpoint (req: express.Request, res: express.Response): void {
  const foo = req.headers["x-foo"] as string || ""

  setGlobal({ foo })
  const context = {}
  const markup = renderToString(
    <StaticRouter location={req.url}>
      <App/>
    </StaticRouter>,
  )

  <... respond with HTML, just boring boilerplate code ...>
}

现在在React渲染树的深处,组件可以做到这一点:

export function MyComponent() {
  console.log(getGlobal().foo)
}

从技术上讲,我的问题范围很狭窄:通过在每个请求上调用setGlobal,我是否冒着将该全局内容泄漏到其他请求中的真实风险?

但是更广泛地说,我也欢迎关于设计的反馈。我不喜欢全局变量,但是还没有找到其他解决方案,但是我也认识到,我不是我所选择的任何技术的专家,所以也许您可以帮助我开拓替代方案。很高兴听到您的想法。

如果我在处理请求期间设置了全局变量,是否可以将该信息泄漏到后续请求中?也就是说,在每个请求上都设置了全局变量,并且因为nodejs是single -...
node.js reactjs express global-variables server-side-rendering
1个回答
1
投票
您是正确的-由于Node是单线程的,一次仅处理一个请求,这意味着该值很可能不会泄漏到另一个请求中。
© www.soinside.com 2019 - 2024. All rights reserved.