2013-06-25 37 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