我在做一个微信的分享功能,要求分享的时候需要带上分享者的ID,然后我通过前台的脚本,在当前用户执行分享动作的时候,把ID也带上,传到后台,因为微信在获取用户信息的时候,会有一个跳转到回调地址的过程,比如我当前请求的地址是http://www.wit-orange.com?app=ballgame&shareOpenid=xxxx,在调用微信的获取用户信息接口的时候,回有一个重定向到http://www.wit-orange.com 的动作,这个时候,我后台获取shareOpenid的代码如下:
router.get('/', function(req, res, next) {
if (req.query.app !== undefined) {
console.log(123);
global.appflag = req.query.app;
if (req.query.shareOpenid !== undefined) {
var shareOpenid = req.query.shareOpenid;
} else {
var shareOpenid = undefined;
}
if (req.query.bymp !== undefined) {
var bymp = req.query.bymp;
} else {
var bymp = undefined;
}
}
console.log("appflag:"+global.appflag);
console.log("shareOpenid:"+shareOpenid);
console.log("bymp:"+bymp);
});
我发现在完成跳转到回调地址之后,获取到的shareOpenid为undefined, 尝试着把shareOpenid定义在路由的外面,这样可以成功的获取到shareOpenid的值,但是问题来了,当我有两个用户同时访问这个路由的时候,shareOpenid的值就出现的混乱情况,我看了一下,原因应该是在路由器外面定义的变量,在每个路由中都可以访问到,当A用户在访问的同时,B用户也在访问的时候,A用户访问到了B用户带过来的shareOpenid的值,于是 A用户就获取到了B用户的信息,造成了信息的混乱。 对于这样的情况,express是怎么处理的,是否有大神遇到过这样的问题,又是怎么处理这个问题的?
我尝试着使用nodejs的全局变量global来存储我的变量,但是这样的话,shareOpenid就没法根据不同用户带过来的值实时的改变了,这样也不符合当前的需求。