【问题标题】:how to access node express response object in this case?在这种情况下如何访问节点快速响应对象?
【发布时间】:2017-07-27 10:51:39
【问题描述】:

我正在尝试使用节点(express、https 模块)在高层次上执行以下操作:

  1. 在 /example 端点(快速应用)上监听 POST 请求(比如 R1)
  2. 从请求中读取 post 有效负载,对其进行重新打包,然后向外部 REST API 发出 https POST 请求(例如 R11)。
  3. 从对 R11 的响应中读取 post 有效负载,对其进行重新打包并作为响应发送给 R1。

问题是,如何从 callbackExternalApi 中发送响应?请参阅下面的代码和 cmets 中的问题。

    const callbackExternalApi = 
    function (response) {
        response.on('data', 
            function(data) {
                // do some processing on data
                var processedData = ...
                **// I want response_R1 over here
                // so that I can do the following
                response_R1.send(processedData)
                // how do I get response_R1 over here??**
            })
    }

    const requestHandlerExample = 
    function (request_R1, response_R1) {

        // payload
        var postBodyJson = '' // some payload here

        // headers
        var postHeaders = {
        'content-type'  : 'application/json',
        'accept'        : 'application/json'
        }

        // options
        var postOptions = {
            'host'      : 'localhost',
            'port'      : '9000',
            'path'      : '/external/rest/api',
            'method'    : 'POST', 
            'headers'   : postHeaders
        }

        // do the post call
        var postRequest = _httpsModule.request(postOptions, callbackExternalApi)
        postRequest.write(postBodyJson);
        postRequest.end();
        postRequest.on('error', function(error) {
            console.error('an error occured'+error)
        })
    }

    _app.post('/example', requestHandlerExample)

谢谢,

贾丁

【问题讨论】:

    标签: node.js express https


    【解决方案1】:

    我刚刚为 response_R1 定义了全局变量,并在 requestHandlerExample 回调中设置了这些变量。不确定这是否是最好的方法,但它确实有效。

    var _response_R1
    
    const callbackExternalApi = 
    function (response) {
        response.on('data', 
            function(data) {
                // do some processing on data
                var processedData = ...
                _response_R1.send(processedData)
            })
    }
    
    const requestHandlerExample = 
    function (request, response) {
        _response_R1 = response // set this for use in callbackExternalApi
    
        // payload
        var postBodyJson = '' // some payload here
    
        // headers
        var postHeaders = {
        'content-type'  : 'application/json',
        'accept'        : 'application/json'
        }
    
        // options
        var postOptions = {
            'host'      : 'localhost',
            'port'      : '9000',
            'path'      : '/external/rest/api',
            'method'    : 'POST', 
            'headers'   : postHeaders
        }
    
        // do the post call
        var postRequest = _httpsModule.request(postOptions, callbackExternalApi)
        postRequest.write(postBodyJson);
        postRequest.end();
        postRequest.on('error', function(error) {
            console.error('an error occured'+error)
        })
    }
    
    _app.post('/example', requestHandlerExample)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多