Я пытаюсь передавать данные в экспресс-шаблон по мере их поступления.Это работает, как и ожидалось, когда я не использую шаблонизатор.Я вызываю res.write
(опционально после вызова res.writeHead
или чего-то подобного), а затем вызываю res.end
, когда закончите.Мне даже разрешено отправлять html-теги.
TL; DR Я использую модуль neo4j-driver npm, который поддерживает потоковую передачу результатов (что мне нужно) или обещания, которые ждут всех результатов, прежде чем обрабатывать их (которые я предпочитаю не использовать).Я следовал за ответом здесь , который ссылался на несуществующую ссылку на express-partials (не уверен, что это такое).Мне кажется, что нет способа написать (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, чтобы первоначально отображалось только несколько записей (может быть), но список увеличивается по мере того, как возвращается больше?Спасибо.