我正在尝试在数据到达时将其流式传输到快速渲染的模板。当我不使用模板引擎时,这可以按预期工作。我先呼叫res.write
(也可以在呼叫res.writeHead
或类似名称之后),然后在完成后呼叫res.end
。我什至也可以发送html标签。
TL; DR
我正在使用neo4j-driver npm模块,该模块支持流式传输结果(我需要的)或Promise,它在处理所有结果之前等待所有结果(我不喜欢使用)。我遵循了答案here,该答案引用了指向部分表达式的失效链接(不确定是什么)。在我看来,渲染视图(res.write
)之后无法写(res.render
)。
这是工作示例(没有模板引擎)
session
.run('MATCH (n:Movie) return n LIMIT 250')
.subscribe({
onNext: (rec) => {
let frec = {
id: rec._fields[0].identity.low,
title: rec._fields[0].properties.title,
year: rec._fields[0].properties.released.low,
};
movieArray.push(rec);
console.log(frec);
res.write(JSON.stringify(frec) + '\n\n');
},
onCompleted: () => {
session
.run('MATCH (n:Person) return n LIMIT 250')
.subscribe({
onNext: (p) => {
let fp = {
id: p._fields[0].identity.low,
name: p._fields[0].properties.name,
};
console.log(fp);
res.write(JSON.stringify(fp) + '\n\n');
},
onCompleted: () => {
session.close();
res.end();
},
onError: (e) => {
console.log(e);
},
});
},
onError: (err) => {
console.log(err);
},
当然,它像这样围绕在路由声明(app.get('/', (req, res) => {})
)周围。
PS:我知道最终的解决方案是使用前端JavaScript框架,例如React,Vue和Angular2。但是暂时,我是否可以将数据流传输到ejs或handlebars,以便最初仅显示几条记录(也许),但是随着返回的更多,列表也会增加? 谢谢。