确保nodejs服务器在异步调用之前没有响应?

时间:2016-03-08 22:53:49

标签: node.js request synchronous

我有一个NodeJS服务器,它接收来自客户端的请求,然后向上游休息服务发出请求。我遇到的问题是我通过express对上游休息服务的调用是异步的,所以调用函数在收到来自上游服务器的响应之前返回到客户端。

client --->  serverA ---> serverB

示例:

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

我看到的任何地方我都被告知不要在NodeJS中进行同步调用,因为它不会扩展,但此时我并没有事情会像预期的那样运行。

有人能建议正确的方法解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

您的快速路线没有自动响应。如果你没有设置响应,那么服务器不会响应(一段时间后你会收到错误)。

例如

app.get(' / something',function(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');
     }
   });
})

我不能更具体,因为我不了解细节。但我的回答可能对你有所帮助。

答案 1 :(得分:0)

您必须将回调函数传递给上游服务。

//After the value got from postExecute, it was showing null to the context 
public void getAdapterView(ArrayList<GetSetOffers> hotelList){
    hca=new HotelCustomAdapter(getActivity(),R.layout.hotel_custom_listview,hotelList);
    list.setAdapter(hca);
} 

您可以参考此https://www.npmjs.com/package/request

答案 2 :(得分:0)

要实现这一点,不需要编写同步代码

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


})