是否可以在 express 的请求级别更改全局变量(如 fetch)?
我有这个中间件。
app.use((req, res, next) => {
if(req.headers.host.startsWith('mock.')) { // e.g. mock.myapp.com
global.fetch = {};
}
next();
});
我的意图是fetch
在某些请求中阻止使用,但在其他请求中允许使用。
这会影响后续请求吗?
如果可以,我如何才能将此更改应用于当前请求。
出色地。可以在中间件中更改全局变量,但是做您想做的事情是不切实际的,因为 node.js 可以轻松地同时处理多个请求。因此,您不能真正为一个不会影响同时处理的其他请求的请求更改全局环境。
您实际上必须强制 Express 序列化所有请求处理(构建某种输入队列),并且在开始处理下一个请求之前只处理一个请求直到完成。当然,这会破坏 node.js 的可扩展性。
“每个请求”环境是req
对象。这就是中间件通常只放置适用于这个请求的东西的地方。
我的目的是阻止在某些请求中使用 fetch 但在其他请求中允许它。
真的不能那样做。
这会影响后续请求吗?
是的。您将永久更改global
对象。
如果可以,我如何才能将此更改应用于当前请求。
我认为我们需要更多地了解您实际尝试解决的更高级别的问题以及原因。该req
对象是放置状态的典型位置,该状态应该唯一地应用于此特定请求处理,因为req
每个请求都有一个唯一对象,并且一个请求对任何其他请求的对象一无所知。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句