2016-03-08 41 views
0

我有一個NodeJS服務器,它接收來自客戶端的請求,然後向上遊休息服務發出請求。我遇到的問題是,通過express對上游rest服務的調用是異步的,所以調用函數在從上游服務器收到響應之前返回給客戶端。確保nodejs服務器在異步調用之前不會響應?

client ---> serverA ---> serverB 

例子:

app.all('/api/*', function(req,res) { 
    request(...) 
    // wait for response from request somehow 
}) 

我到處看看,有人告訴我不要使同步調用中的NodeJS,因爲它沒有形成規模,但在這一點上我沒有事件有東西會按預期行事。

任何人都可以提出正確的方法來解決這個問題嗎?

回答

2

您的快速路線不會自動響應。如果你沒有設置響應,那麼服務器不會響應(一段時間後你會得到錯誤)。

例如

app.get( '/東西',函數(REQ,RES){

});

如果你發送請求到這個路由器它不會迴應。所以你不必擔心。

並嚴格對您的問題。您的服務器請求在完成其調用(回調或承諾)後必須執行某些操作。

app.all('/api/*', function(req,res) { 
    request(function(response){ 
     //callback 
     //here you send response 
     res.send('OK'); 
    }); 
}) 

但是如果你的服務器請求失敗怎麼辦?也許你的服務器請求也返回錯誤?

app.all('/api/*', function(req,res) { 
    request(function(err, response){ 
    if(err){ 
     res.send('ERROR'); 
    } else { 
     res.send('OK'); 
    } 
    }); 
}) 

我不能更具體,因爲我不知道細節。但我的回答可能會對你有所幫助。

0

您必須將回調函數傳遞給您的上游服務。

app.all('/api/*', function(req,res) { 
    request(function(err, response){ 
    if(err){ 
     res.jsonp({'status':200,'message':'ALL OK'}); 
    } else { 
     res.jsonp({'status':201,'message':'Something went wrong'}); 
    } 
    }); 
}) 

你可以參考這個https://www.npmjs.com/package/request

0

要做到這一點,無需編寫代碼同步

app.all('/api/*', function(req,res) { 
request({url : .. , timeout : ..},function(err, resp, body){ 
    //error handling 
    res.send("your response"); 
}); 


})