【问题标题】:How to call and send data to callback in https request function如何在https请求函数中调用和发送数据到回调
【发布时间】:2018-05-03 04:02:31
【问题描述】:

我正在从一个看起来像这样的 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) 即可使其正常工作,但我不确定这是最佳实践。

【问题讨论】:

  • 必须更容易地使用为您处理所有这些的request() 库。它会累积响应并为您调用回调。
  • @jfriend00 这段代码不是我写的。它是我正在使用的 API 的一部分,我不想完全改变它。
  • 按原样,代码从不调用cb - 所以,这毫无意义
  • @JaromandaX 这就是我的帖子的重点......
  • 所以,API 最初设计得很糟糕,采用了从未使用过的 cb 参数,您反对更改 API?零意义

标签: javascript node.js express callback


【解决方案1】:

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

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();

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多