如何在https请求函数中调用和发送数据到回调

时间:2017-11-20 00:16:04

标签: javascript node.js express callback

我从一个看起来像这样的API调用一个函数。问题是它从来没有从我的服务器端代码实际调用回调。我需要它来调用那个回调(cb)并用它发送一部分数据块,但不知道如何去做。

pwPOST: function (options, data, cb) {
    var postData = JSON.stringify(data);
    console.log("Options: ", options);
    console.log("PostData: ", postData);

    var req = https.request(options, (res) => {
        console.log('STATUS:', res.statusCode);
        console.log('HEADERS:', JSON.stringify(res.headers));

        res.setEncoding('utf8');

        res.on('data', function (chunk) {
            console.log('BODY:', chunk);
        });

        res.on('end', function () {
            console.log('No more data in response.');
        });
    });

    req.on('error', function (e) {
        console.log('Problem with request:', e.message);
    });

    console.log("PostData: ", postData);
    req.write(postData);
    req.end();

}

我通过在res.on()函数中添加cb(chunk)来实现它,但我不确定这是最佳实践。

1 个答案:

答案 0 :(得分:0)

通常人们会将data事件中的块累积到单个字符串或数组中,因为可能会有多个data事件。然后在end甚至打电话给你回电。这使用第一个参数的正常节点回调约定为错误或null,第二个参数使用实际数据:

pwPOST: function (options, data, cb) {
    var postData = JSON.stringify(data);

    var req = https.request(options, (res) => {

        res.setEncoding('utf8');
        var body = ""
        res.on('data', function (chunk) {
            body += chunk // accumlate each chunk
        });

        res.on('end', function () {
            cb(null, body) // call the call back with complete response
        });
    });

    req.on('error', function (e) {
        cb(e) // call the callback with error
    });

    req.write(postData);
    req.end();

}