2013-06-25 39 views
3

我試圖建立一個處理服務器端的節點異步響應

  • 處理來自Web客戶端的GET請求一個簡單的節點服務
  • 解析提交的PARAMS
  • 使用這些PARAMS查詢另一個REST服務異步
  • 將REST服務結果返回到原始GET請求。

我剛剛開始使用節點中的異步編程,通常我很努力地理解如何在異步調用之間保留範圍。

基本上 - 我如何通過'req'將JSON服務'result'發送回原來的GET請求?

我使用Express和Request,路由處理程序類似:

exports.list = function(req, res){ 
var params = req.query; 
var queryParam= params.queryParm; 

var restURL = "http://some-json-service.com?queryParam=" + queryParam; 

var request = require('request'); 

request(restURL, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     var result = JSON.parse(body); 
     // ? How do I send result back to the req? 
    } 
}) 

回答

1

你可以從字面上返回響應,那麼,你有你的意見,你會做什麼:

request(restURL, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     var result = JSON.parse(body); 
     res(result) 
    } 
}) 

的這種方法的問題在於,您的客戶請求將等待第二個服務的響應,如果必須完成的話,這是很好的。請注意您可能造成的延遲。

還要確保在出現錯誤的情況下,您還會返回響應。

這似乎很簡單,所以讓我知道如果我沒有完全理解你的問題。

乾杯。

Vitor。

+0

好吧,我看到 - 我只是覺得很奇怪,這個匿名函數的範圍如何? – mjr

+0

也是在服務器端進行阻塞或者對服務器性能不好的做法? – mjr

+0

** 1)**我剛剛收到我發現的第一個鏈接之一:http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/ 。內部作用域可以看到外部作用域(99%),但反之不起作用。這就是爲什麼你會首先使用匿名函數。使用函數引用不會讓你這樣做。 ** 2)**好吧,如果你必須這樣做,並且如果你保證你快速失敗,以防第二次服務很慢,那應該沒問題。作爲服務提供商,您公開了一個API,您在後面執行的操作取決於您,並且大多數服務都會有後續調用。 – bitoiu