2016-03-08 47 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"); 
}); 


})