我从一个看起来像这样的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)来实现它,但我不确定这是最佳实践。
答案 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();
}