首页 > 解决方案 > 在节点 https.request 调用之后,我应该在哪里放置回调以返回数据?

问题描述

我正在尝试使用节点http本机库读取请求的内容

我想发出一个 POST 请求,我已经成功地做到了,但是然后使用保存的响应块使用我的 lambda 函数上的回调将它们作为整体输出。

这是我的代码:

getData: function (event, context, callback) {

    let inputData = event.body;
    let requestData = Object.assign({}, inputData);

    var dataRequest = 'field='+ requestData.Field1;

    var options = {
        method: 'POST',
        hostname: 'my.hostname.com',
        path: '/', 
        headers: {
            "content-type": "application/x-www-form-urlencoded", 
            "connection" : "keep-alive",
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",  
        }
    };          

    var dataStr = "";
    var req = https.request(options, function (response) {    
            response.on('data', (chunk) => {dataStr += chunk;}); 
            response.on('end', () => {                   
                console.log(response.statusCode + " " + dataStr);
                //(*) causes "hang up socket error" 
                return callback(dataStr); 
            });            
    });

    req.on('error', err => {          
       return callback("request error:" + err);
    })
    req.write(dataRequest);
    req.end(); //maybe req.end(callback(null,dataStr))?;

    //on commented (*) works fine but dataStr string comes empty
    callback(null,dataStr);
}

我可以在哪里放置回调以输出dataStr变量内容作为此端点的响应?

感谢您的洞察力。

标签: node.jscallbackaws-lambdanode-https

解决方案


对于您的代码,将回调方法放在已经存在的“end”和“error”回调中是正确的。从代码末尾删除回调。

您可以在代码中的任何位置保留回调,但如果您想返回数据,那么在这种情况下,最好保留在该函数的回调中。

还有一件事,回调不会结束代码的执行,直到您返回主处理程序


推荐阅读