【发布时间】:2019-12-27 22:26:00
【问题描述】:
使用 node.js 中的 form-data 模块,你可以做到这一点
form.pipe(request)
把表单数据放到请求中。但是你怎么能等到它完成呢?有没有这样的回调
form.pipe(request).done(function(err) {});
有人知道吗?
谢谢
【问题讨论】:
使用 node.js 中的 form-data 模块,你可以做到这一点
form.pipe(request)
把表单数据放到请求中。但是你怎么能等到它完成呢?有没有这样的回调
form.pipe(request).done(function(err) {});
有人知道吗?
谢谢
【问题讨论】:
在文档中,他们使用:
form.pipe(request);
request.on('response', function(res) {
console.log(res.statusCode);
});
【讨论】:
我最终做了什么让我的测试工作:
app.js
// form is declared
return await new Promise((resolve, reject) => {
const req = https.request(
process.env.HOST,
{
method: 'POST',
headers: form.getHeaders()
},
(res) => {
let data = '';
res.on('data', (d) => {
data += d;
});
res.on('end', () => {
resolve({
statusCode: res.statusCode,
body: data,
});
});
},
).on('error', reject);
form.pipe(req);
});
和
test-handler.js
sinon.replace(https, 'request', (url, options, callback) => {
const request = new EventEmitter();
request.on('pipe', () => {
const res = new EventEmitter();
res.statusCode = 200;
callback(res);
res.emit(
'data',
JSON.stringify({}),
);
res.emit('end');
});
return request;
});
我知道它并没有严格回答您的问题,因为“管道”事件在管道开始时而不是在管道完成时触发,但在测试方面我不知道如何以其他方式完成响应。
【讨论】: