我正在尝试弄清楚如何使用Hapi流式传输HTML响应。我在下面有一个测试代码片段。这将立即返回HTTP标头,但在调用stream.end()
之前,不会将任何写入流的内容发送到浏览器。 Hapi声称支持流,所以我假设我没有正确设置流。
'use strict';
const Hapi = require('hapi');
const Stream = require("stream");
const server = new Hapi.Server();
server.connection({ port: 3000, host: 'localhost' });
server.route({
method: 'GET',
path: '/',
handler: (request, reply) => {
const stream = new Stream.PassThrough();
stream.write('<html><head><script src="https://unpkg.com/react@15.3.1/dist/react.min.js"></script>');
reply(null, stream).type('text/html').code(200);
setTimeout(() => {
stream.write('</head><body>hello</body></html>');
stream.end();
}, 2000);
}
});
server.start((err) => {
if (err) {
throw err;
}
});
此处的用例是能够发送HTML的<head>
,以便浏览器可以开始下载资源,而其余内容仍在服务器上生成。