![](/img/trans.png)
[英]Node/Express API when getting mutlipel requests data gets mixed up and incorrect results occur
[英]2 concurrent requests data from API were mixed up
我當時使用Nodejs作為應用程序API的后端,但是我意識到,當有2個不同的用戶繼續請求相同的方法時,有時MySQL請求返回的數據可能會混雜在一起,這是我的代碼:
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
是用戶標識。 正常情況下,終端輸出如下所示,用戶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的數據請求,反之亦然,請問該如何解決?
您不能使用全局變量來存儲中間件中的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
而不是全局變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.