Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Express - одновременный рендеринг нескольких шаблонов (https://javascript.ru/forum/node-js-io-js/63516-express-odnovremennyjj-rendering-neskolkikh-shablonov.html)

smegol 12.06.2016 14:58

Express - одновременный рендеринг нескольких шаблонов
 
Добрый день!

Пытаюсь сделать несколько render одновременно.

1-й - должен выводить все разделы сайта на любом URL
2-й - должен выводить всех пользователей в 1-м разделе сайта

Но срабатывает только тот который стоит первым.

Подскажите пожалуйста как это можно сделать.

// 1-й
    app.use(function(req, res, next) {
     // Запрос в БД
      section.get.all(function(err, allSection) {
        // Отправка данных на страницу
        res.render('index', {
          allSection: allSection
        });
      });
    });

    // 2-й
    app.get('/section/1', function(req, res, next) {
      user.get.all(function(err, allUser) {
        res.render('index', {
          allUser: allUser
        });
      });
    });

Botik21 12.06.2016 15:25

Вообще так делать нельзя и в вашем случае подтягивать рендер всех разделов сайта должен шаблонизатор.
Но для передачи управления дальше Експрессу используйте вызов next(), идущую третьим параметром.

smegol 12.06.2016 16:04

Цитата:

Сообщение от Botik21
подтягивать рендер всех разделов сайта должен шаблонизатор

До этого момента я думал что всё запросы и редер делаются в роутере.
А можно пример и где об этом почитать?:)

Botik21 12.06.2016 16:15

Да в роутере, но запрос на рендер как правило один и рендерит он целиком всю страницу.

smegol 12.06.2016 17:16

Цитата:

Сообщение от Botik21 (Сообщение 419167)
Да в роутере, но запрос на рендер как правило один и рендерит он целиком всю страницу.

Не могу понять это нужно без app.use? Тогда откуда res взять?
Я находил вариант, там 2 шаблона так реддырили:
(у меня не работает)


// 1-й
    app.use(function(req, res, next) {
      section.get.all(function(err, allSection) {
        res.render('index', {
          allSection: allSection
       // 2-й
        }, function(err, data) {
          app.get('/section/1', function(req, res, next) {
           user.get.all(function(err, allSection) {
            res.render('index', {
              user: user
            });
           }
          });
        });
      });
    });

smegol 12.06.2016 20:01

Мудры слова твои!
Пожалуйста, дай Смеглу еще подсказчику или кусочек кода :thanks:

smegol 14.06.2016 16:21

А решение оказалось таким:

app.use(function(req, res, next) {
 // Запрос в БД
  section.get.all(function(err, allSection) {
    req.allSection = allSection; 
    next():
  });
});
 
// 2-й
app.use('/user', function(req, res, next) {
  user.get.all(function(err, allUser) {
    res.render('index', {
      allUser: allUser, 
      allSection: req.allSection
    });
  });
});


1 = middleware
2 = request /user


Часовой пояс GMT +3, время: 03:57.