开发者

Render template to variable in expressjs

开发者 https://www.devze.com 2023-04-09 18:02 出处:网络
Is there a way to render template to a variable instead to output? res.render(\'list.ejs\', { posts: posts

Is there a way to render template to a variable instead to output?

res.render('list.ejs', {
    posts: posts
});
开发者_开发问答

something like this

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


The easiest way to do that is to pass a callback to res.render, in your example:

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

But if you want to render partial templates in order to include them in another template you definitely should have a look at view partials.


I am quite a newbie on express.js, anyway I am not sure you can access the rendered string that way, although if you look at express' "view.js" source on github (here) you see that it's accepting a callback as second argument, if that may help: you may access the rendered string there.

Otherwise, I think it's quite easy to patch the code to add a method returning the rendered string without sending it: on line #399 you have the very call that gives the string you are looking for.


This wasn't the question originally asked, but based on comments from the OP and others, it seems like the goal is to render a partial via json (jsonp), which is something I just had to do.

It's pretty easy:

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

Note: In my case, the header partial required the session, and my template library (express-hbs) needed layout: null to render the partial without using the default layout.

You can then call this from Javascript code in the client like any other JSONP endpoint.

0

精彩评论

暂无评论...
验证码 换一张
取 消