如何避免superagent:双回调bug
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免superagent:双回调bug相关的知识,希望对你有一定的参考价值。
我使用supertest进行简单的get请求。回应可能是一张图片。
Supertest - v3.0.0
SuperAgent - v3.8.2
Node - carbon (8.9.4)
经过所有这些升级后,我遇到了以下情况
码:
const request = require('supertest');
it('mocha test', async () => {
const res = await request('${serviceUrl}').get('/api/image.png')
});
在此请求后,我收到警告superagent: double callback bug
和错误:
Error: Parse Error
at Socket.socketOnData (_http_client.js:440:20)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at TCP.onread (net.js:594:20)
我已经阅读了很多解决方案来更新superagent到最新版本。对我不起作用。
答案
你正在获取图像,你需要一个解析器来获取图像。你可以尝试这样的事情。
function binaryParser(res, callback) {
res.setEncoding('binary');
res.data = '';
res.on('data', function (chunk) {
res.data += chunk;
});
res.on('end', function () {
callback(null, new Buffer(res.data, 'binary'));
});
}
// example mocha test
it('mocha test', function (done) => {
request(app)
.get('/api/image.png')
.expect(200)
.expect('Content-Type', 'image.png')
.buffer()
.parse(binaryParser)
.end(function(err, res) {
if (err) return done(err);
// binary response data is in res.body as a buffer
assert.ok(Buffer.isBuffer(res.body));
console.log("res=", res.body);
done();
});
});
以上是关于如何避免superagent:双回调bug的主要内容,如果未能解决你的问题,请参考以下文章