对于一个呼叫,我正在使用一个巨大的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会照顾它,但响应始终显示为空。
答案 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);
}