在这种情况下如何访问节点表达响应对象?

时间:2017-07-12 06:58:16

标签: node.js express https

我正在尝试使用node(express,https modules)在高级别上执行以下操作:

  1. 在/ example端点(快速应用程序)
  2. 上侦听POST请求(例如R1)
  3. 从请求中读取帖子有效负载,处理它重新打包并向外部REST API发出https POST请求(比方说R11)。
  4. 从对R11的响应中读取帖子有效负载,处理它重新打包并作为响应发送给R1。
  5. 问题是,如何从callbackExternalApi内发送响应?请参阅下面的代码和评论中的问题。

        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)
    

    谢谢,

    Jatin

1 个答案:

答案 0 :(得分:0)

我刚刚为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)