HapiJS回复可读流

时间:2019-08-24 01:50:56

标签: hapijs

对于一个呼叫,我正在使用一个巨大的JSON对象进行回复,该对象有时会导致Node事件循环被阻塞。因此,我正在使用Big Friendly JSON包来流式传输JSON。我的问题是我不知道该如何实际回复信息流

我的原始代码很简单

let searchResults = s3Access.getSavedSearch(guid)).Body;
searchResults = JSON.parse(searchResults.toString());
return reply(searchResults);

效果很好,但停滞在巨大的有效载荷上 我已经尝试过使用Big Friendly JSON软件包https://gitlab.com/philbooth/bfj

const stream = bfj.streamify(searchResults);
return reply(stream); // according to docs it's a readable stream

但是随后我的浏览器抱怨响应为空。然后,我尝试将以下内容添加到回复中,结果相同。

.header('content-encoding', 'json')
.header('Content-Length', stream.length);

我也尝试过return reply(null, stream);,但这产生了大量的节点错误

我还需要其他一些方法来组织此活动吗?我的理解是,我只能回复可读的流,而Hapi会照顾它,但响应始终显示为空。

1 个答案:

答案 0 :(得分:0)

您尝试使用h.response,这里h是答复。

示例:

handler: async (request, h) => {
    const { limit, sortBy, order } = request.query;
    const queryString = {
      where: { status: 1 },
      limit,
      order: [[sortBy, order]],
    };
    let userList = {};

    try {
      userList = await _getList(User, queryString);
    } catch (e) {
      // throw new Boom(e);
      Boom.badRequest(i18n.__('controllers.user.fetchUser'), e);
    }
    return h.response(userList);
  }