我有一个NodeJS服务器,它接收来自客户端的请求,然后向上游休息服务发出请求。我遇到的问题是我通过express对上游休息服务的调用是异步的,所以调用函数在收到来自上游服务器的响应之前返回到客户端。
client ---> serverA ---> serverB
示例:
app.all('/api/*', function(req,res) {
request(...)
// wait for response from request somehow
})
我看到的任何地方我都被告知不要在NodeJS中进行同步调用,因为它不会扩展,但此时我并没有事情会像预期的那样运行。
有人能建议正确的方法解决这个问题吗?
答案 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);
}
答案 2 :(得分:0)
要实现这一点,不需要编写同步代码
app.all('/api/*', function(req,res) {
request({url : .. , timeout : ..},function(err, resp, body){
//error handling
res.send("your response");
});
})