Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在服务器端的节点中处理异步响应_Javascript_Json_Node.js_Express_Request - Fatal编程技术网

Javascript 在服务器端的节点中处理异步响应

Javascript 在服务器端的节点中处理异步响应,javascript,json,node.js,express,request,Javascript,Json,Node.js,Express,Request,我正在尝试构建一个简单的节点服务 处理来自web客户端的GET请求 解析提交的参数 使用这些参数异步查询另一个REST服务 将REST服务结果返回到原始GET请求 我刚刚开始在node中进行异步编程,通常我很难理解如何在异步调用之间保留作用域 基本上-如何通过'req'将JSON服务'result'发送回原始GET请求 我使用的是Express,路由处理程序如下所示: exports.list = function(req, res){ var params = req.query; var

我正在尝试构建一个简单的节点服务

  • 处理来自web客户端的GET请求
  • 解析提交的参数
  • 使用这些参数异步查询另一个REST服务
  • 将REST服务结果返回到原始GET请求
我刚刚开始在node中进行异步编程,通常我很难理解如何在异步调用之间保留作用域

基本上-如何通过'req'将JSON服务'result'发送回原始GET请求

我使用的是Express,路由处理程序如下所示:

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?
    }
})

您可以直接返回回复,因此在您有评论的地方,您将执行以下操作:

request(restURL, function (error, response, body) {
  if (!error && response.statusCode == 200) {
      var result = JSON.parse(body);
      res(result)
  }
})
这种方法的问题是,您的客户机请求将挂起第二个服务的响应,如果必须这样做,这是可以的。只是要注意你可能造成的延迟

此外,还要确保在出现错误时,您也会返回响应

这似乎很简单,所以如果我没有完全理解你的问题,请告诉我

干杯


Vitor.

好的,我明白了-我只是觉得这很奇怪,res在匿名函数中的作用域是什么?服务器端是否也会出现这种情况,或者服务器性能是否会出现问题?1)我刚刚找到了我找到的第一个链接之一:。内部范围可以看到外部范围(99%),但相反的范围不起作用。这就是为什么首先要使用匿名函数。使用函数引用不允许这样做。2) 好吧,如果你必须这样做,如果你保证在第二次服务很慢的情况下你会很快失败,那应该没问题。作为一个服务提供商,你公开一个API,你在后面做什么取决于你自己,大多数服务都会有后续调用。。。