如何避免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的主要内容,如果未能解决你的问题,请参考以下文章

vscode代码片段建议bug

superagent 和 nock 如何协同工作?

如何避免 FragmentManager 重新创建片段?

如何将 cookie 与 superagent 一起使用?

unity状态机怎么调出来

BottomNavigationView - 如何避免重新创建片段并重用它们