如何停止stream更改我的原始缓冲

我正在使用stream-to-promise npm模块在我的茉莉花testing中创buildmultipart / form-data载荷。 我的有效载荷包括一个图像文件作为缓冲区,但是当有效载荷通过stream承诺,它改变或破坏我的原始图像缓冲区在有效载荷莫名其妙,所以我的testing失败。 有没有办法来防止这一点?

it('test /identity-verification/your-first-form-of-id POST with validation passing', function(done){ var form = new FormData(); var image = fs.createReadStream("image.png"); streamToBuffer(image, function (err, buffer) { form.append('firstID', 'passport'); form.append('firstIDImage', buffer); var headers = form.getHeaders(); streamToPromise(form).then(function(payload) { var options = { method: 'POST', url: '/identity-verification/your-first-form-of-id', payload: payload, headers: headers }; server.inject(options, function(response) { expect(response.statusCode).toBe(302); expect(response.headers.location).toMatch('/identity-verification/your-first-form-of-id/upload-successful'); done(); }); }); }); }); 

在通过承诺stream之后,有效载荷中的缓冲区如下所示:

你不需要stream到缓冲区。 您已经从createReadStream获得了缓冲区。 如果你摆脱了这一点,它应该工作。 有一件事要小心,是你的maxBytes设置得足够高,以适应你的testing图像。 当我testing时,这引起了一些神秘的错误。

下面的代码对我来说工作正常。

  var streamToPromise = require("stream-to-promise"); var FormData = require("form-data"); var fileTypeModule = require("file-type"); var fs = require("fs"); var q = require("q"); var Hapi = require('hapi'); var server = new Hapi.Server({ debug: { request: ['error'] } }); server.connection({ host: 'localhost', port: 8000 }); server.route({ method: 'POST', path: '/test', handler: function(request, reply) { var data = request.payload.firstIDImage; var fileType = fileTypeModule(data); reply(fileType); }, config: { payload: { maxBytes: 1048576 } } }); var start = server.start(); var form = new FormData(); var headers = form.getHeaders(); form.append('firstID', 'passport'); form.append('firstIDImage', fs.createReadStream("image.png")); var append = streamToPromise(form); q.all([start, append]).then((results) => { var options = { method: 'POST', url: '/test', payload: results[1], headers: headers }; server.inject(options, function(response) { console.log(response.payload); }); });