CNode

如何保证对于一次网络请求,有一个对应的全局变量

问答
Jjj0920发布于11 年前最后回复11 年前15 回复5590 浏览0 收藏

可以做到这一点吗

查看回复

回复 (15)

P
pentium100#1·11 年前

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

1
1du1du#2·11 年前

diao 自豪地采用 CNodeJS ionic

C
CoderIvan#3·11 年前

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

K
kiliwak#4·11 年前

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

J
jj0920#5·11 年前
引用 Oppaahaha,前几天我也在想...... 1. 可以挂req上面,如果是express 2. 存redis里面

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

D
dayuoba#6·11 年前
http.Server(function listener(function(req, res) {
	//all objects should be in listener scope
}));
W
wyTrivail#7·11 年前

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

var middleware = function(req, res,next){
	req.var1 = your_var;
	next();
};
J
jj0920#8·11 年前
引用 wyTrivail用一个middleware,将该变量注入进req。

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

C
captainblue2013#9·11 年前

你是php转过来的吧

J
jj0920#10·11 年前
引用 captainblue2013你是php转过来的吧

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

O
Oppaa#11·11 年前

haha,前几天我也在想......

  1. 可以挂req上面,如果是express
  2. 存redis里面
K
klesh#12·11 年前
引用 jj0920@captainblue2013 不是啊,为什么这么说

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

O
Oppaa#13·11 年前

3,闭包一下 也行

H
huangshaohui#14·11 年前

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

W
wyTrivail#15·11 年前
引用 jj0920@wyTrivail 我需要在持久层获取这个变量,如果沿途一直传递req对象是不合理的

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

参与回复
登录后即可参与回复。登录