簡體   English   中英

來自API的2個並發請求數據混合在一起

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM