Преобразование шаблона в переменную в expressjs

#node.js #express

#node.js #выразить

Вопрос:

Есть ли способ рендерить шаблон в переменную вместо вывода?

 res.render('list.ejs', {
    posts: posts
});
  

что-то вроде этого

 var list = render('list.ejs', {
    posts: posts
});
  

Ответ №1:

Самый простой способ сделать это — передать обратный вызов в res.render , в вашем примере:

 res.render('list.ejs', {posts: posts}, function(err, list){
  // 
});
  

Но если вы хотите отобразить частичные шаблоны, чтобы включить их в другой шаблон, вам определенно следует взглянуть на просмотр частичных элементов.

Комментарии:

1. мне нужно загрузить часть с помощью ajax в ответе json

2. так это работает? Я не хочу фактически возвращать страницу пользователю, я хочу включить отображаемую строку в ответ res.json().

3. Да, это работает. Обратный вызов по умолчанию, который должен был бы вернуть страницу пользователю, не вызывается, когда вы передаете свою собственную.

4. Это нормально, но его проблема в том, что нет более простого синхронного решения.

Ответ №2:

Я совсем новичок в express.js , в любом случае, я не уверен, что вы можете получить доступ к отображаемой строке таким образом, хотя, если вы посмотрите на express’ «view.js » источник на github (здесь) вы видите, что он принимает обратный вызов в качестве второго аргумента, если это может помочь: вы можете получить доступ к отображаемомустрока там.

В противном случае, я думаю, довольно легко исправить код, чтобы добавить метод, возвращающий отображаемую строку, не отправляя ее: в строке # 399 у вас есть тот самый вызов, который выдает искомую строку.

Ответ №3:

Это не был изначально заданный вопрос, но, основываясь на комментариях OP и других, похоже, что цель состоит в том, чтобы отобразить часть через json (jsonp), что я просто должен был сделать.

Это довольно просто:

 app.get('/header', function (req, res)
{
    res.render('partials/header', { session: req.session, layout: null }, function (err, output)
    {
        res.jsonp({ html: output });
    });    
});
  

Примечание: В моем случае частичный заголовок требовал сеанса, и моя библиотека шаблонов (express-hbs) должна layout: null была отображать частичный без использования макета по умолчанию.

Затем вы можете вызвать это из кода Javascript в клиенте, как и любую другую конечную точку JSONP.