如何保证对于一次网络请求,有一个对应的全局变量
发布于 9 年前 作者 jj0920 4697 次浏览 最后一次编辑是 8 年前 来自 问答

可以做到这一点吗

15 回复

你是php转过来的吧

@captainblue2013 不是啊,为什么这么说

haha,前几天我也在想…

  1. 可以挂req上面,如果是express
  2. 存redis里面

@jj0920 没有,你可以把变量放到 req / res 上面。

3,闭包一下 也行

请参考这个: http://www.slideshare.net/isharabash/cls-and-asynclistener 或者搜Continuation-local-storage

diao 自豪地采用 CNodeJS ionic

@jj0920 我也想过,有且只有一种不是办法的办法,就是值传递。。。。

用domain吧. express里加个domain middleware, 然后后续的处理方法里, 就可以用process.domain.xxx来获取/设置针对这个请求的"全局变量". 只是node4已经把domain标记为deprecated, 虽然我还是不会放弃它

@Oppaa 挂req上面是固然可以的,但是那样岂不是会导致持久层和路由耦合吗 存redis里如何设置key呢?

http.Server(function listener(function(req, res) {
	//all objects should be in listener scope
}));

用一个middleware,将该变量注入进req。

var middleware = function(req, res,next){
	req.var1 = your_var;
	next();
};

@wyTrivail 我需要在持久层获取这个变量,如果沿途一直传递req对象是不合理的

req,res这两个变量是贯穿整个请求的,而且可以传递给中间件。把你的值挂载这两个变量里。

@jj0920 这个变量是一个什么样的变量,这个变量是如何生成的呢,是否每个请求对应的这个变量都是不一样的?

回到顶部