Шаблон Render для переменной в expressjs

Есть ли способ отобразить шаблон для переменной вместо вывода?

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){
  // 
});

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

Ответ 2

Я новичок в express.js, так или иначе, я не уверен, что вы можете получить доступ к предоставленной строке таким образом, хотя, если вы посмотрите на источник выражения "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.