如何在form-data node.js模块中等待管道完成?

时间:2017-09-28 22:46:56

标签: node.js request form-data

使用node.js中的form-data模块,你可以这样做

form.pipe(request)

将表单数据放入请求中。但是你怎么能等到它完成呢?有没有像这样的回调

form.pipe(request).done(function(err) {});

有人知道吗?

由于

2 个答案:

答案 0 :(得分:0)

在文档中,他们使用:

form.pipe(request);

request.on('response', function(res) {
  console.log(res.statusCode);
});

答案 1 :(得分:0)

我为使测试正常工作而做了什么:

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

我了解它并不能严格回答您的问题,因为“管道”事件会在管道开始时而不是在管道完成时触发,但是就测试而言,我不知道如何使响应完成。

相关问题