2015-11-06 175 views
1

我在節點js服務器上有一個REST API。當它收到一個GET請求時,它將調用一個將調用另一個服務器get函數的函數。代碼如下所示:處理異步http調用節點js

var server = http.createServer(function(request, response) { 
    console.log("YEAHHH! ", request.method); 
    var string=''; 
    // Inside a request handler method 
    if (request.method == "OPTIONS") { 
     console.log("options"); 
     // Add headers to response and send 
     //response.writeHead(statusCode, responseHeaders); 
     response.writeHead(success,responseHeaders); 
     response.end(); 
    } 
    if(request.method == "GET") { 
     string = soso(); 
    } 

    console.log("*******", string); 
    response.writeHead(success,responseHeaders); 
    response.end(string); 
}); 

soso()是對其他服務器的調用。問題是我想在它完成之前發送soso()函數的響應,所以我得到的是一個空字符串。

我該如何解決這個問題?

我相信這是一個重複,但不能完全找到我在找什麼。所以,任何幫助表示讚賞。

編輯

代碼爲索索功能:

var soso = function() { 
    console.log("this is being called"); 
    var options = {...} 

    var req = https.get(options, function(res) { 
     var str = ''; 
     res.on('data', function (chunk) { 
      str += chunk; 
     }) 

     res.on('end', function() { 
      console.log ("str is: ", str); 
      string = str; 
     }) 

     req.end(); 
     console.log(res.statusCode); 
     console.log(responseHeaders); 
    }); 

} 
+0

哪裏了'索索()'的代碼? – jfriend00

+0

看來你要做的是爲其他服務器做一個代理。有很多很多已有的代碼可以做到這一點。 – jfriend00

+0

@ jfriend000個人最愛的任何鏈接? – discodane

回答

0

你可以嘗試這樣的事情,我不知道。我沒有測試過這個。在soso函數中傳遞響應對象,然後在獲取請求結束後使用response.end(string);

var server = http.createServer(function(request, response) { 
     console.log("YEAHHH! ", request.method); 
     var string=''; 
     // Inside a request handler method 
     if (request.method == "OPTIONS") { 
      console.log("options"); 
      // Add headers to response and send 
      //response.writeHead(statusCode, responseHeaders); 
      response.writeHead(success,responseHeaders); 
      response.end(); 
     } 
     if(request.method == "GET") { 
      string = soso(response); //send response object as argument 
     } else { 
    console.log("*******", string); 
     response.writeHead(success,responseHeaders); 
     response.end(string); 
    } 


    }); 

索索功能

var soso = fuction(response){ // we pass the response object in soso function 
    console.log("this is being called"); 
     var options = {...} 

     var req = https.get(options, function(res) { 
      var str = ''; 
      res.on('data', function (chunk) { 
       str += chunk; 
      }) 

      res.on('end', function() { 
       console.log ("str is: ", str); 
       string = str; 
      }) 

      req.end(); 
    response.writeHead(success,responseHeaders); 
     response.end(string); 
      console.log(res.statusCode); 
      console.log(responseHeaders); 
     }); 

}