【问题标题】:How to wait for the pipe to finish in form-data node.js module?如何在 form-data node.js 模块中等待管道完成?
【发布时间】:2019-12-27 22:26:00
【问题描述】:

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

form.pipe(request)

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

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

有人知道吗?

谢谢

【问题讨论】:

    标签: node.js request form-data


    【解决方案1】:

    在文档中,他们使用:

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

    【讨论】:

      【解决方案2】:

      我最终做了什么让我的测试工作:

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

      我知道它并没有严格回答您的问题,因为“管道”事件在管道开始时而不是在管道完成时触发,但在测试方面我不知道如何以其他方式完成响应。

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 2016-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 2021-06-02
        • 2020-11-29
        • 2016-02-17
        相关资源
        最近更新 更多