Как переписать потоки в браузер после res.render - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь передавать данные в экспресс-шаблон по мере их поступления.Это работает, как и ожидалось, когда я не использую шаблонизатор.Я вызываю 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, чтобы первоначально отображалось только несколько записей (может быть), но список увеличивается по мере того, как возвращается больше?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...