我使用Nodejs作为我应用API的后端,但我意识到当有2个不同的用户继续请求相同的方法时,MySQL请求的数据返回有时会混淆,这是我的代码:< / p>
router.get('/v1/getList', function(req, res) {
model.getList(loginUser, function(groups){
if(!groups.length){
res.json({data: '', success: false, message: 'No record found.'});
} else{
console.log("User:"+loginUser+", Length:"+groups.length);
res.json({data: groups, success: true, message: ''});
}
});
});
loginUser
是用户ID。在正常情况下,终端输出如下所示,其中用户1有2个项目,用户2有3个项目:
User:1, Length:2
User:2, Length:3
User:1, Length:2
User:2, Length:3
and so on...
但是一旦我不断刷新屏幕,终端可能会返回:
User:1, Length:2
User:2, Length:3
User:1, Length:3
User:2, Length:2
我怀疑用户2正在访问用户2的数据请求,反之亦然,我可以知道应该如何解决这个问题吗?
答案 0 :(得分:2)
您不能使用全局变量来存储来自中间件的loginUser
。可以同时在飞行中有多个请求。像这样的全球化混合来自多个请求的数据。
解决此问题的常用方法是将数据存储在中间件的request
对象本身中。然后,您可以从实际请求处理程序访问request
对象上的该属性。由于请求对象对于此特定请求是唯一的,因此不同用户的请求之间不存在数据的交叉耦合。
您的请求处理程序变为此(使用req.loginUser
):
router.get('/v1/getList', function(req, res) {
model.getList(req.loginUser, function(groups){
if(!groups.length){
res.json({data: '', success: false, message: 'No record found.'});
} else{
console.log("User:"+loginUser+", Length:"+groups.length);
res.json({data: groups, success: true, message: ''});
}
});
});
而且,您必须修改中间件以设置req.loginUser
而不是全局变量。