node.js + express + handlebars在单个请求中呈现多个视图

时间:2015-04-27 10:53:08

标签: javascript node.js express handlebars.js

我试图理解我是否可以通过res.render()函数或以其他方式呈现多组视图。

在home.handlebars中我有以下代码

<h1>Home</h1>

我希望将其复制到默认布局中“N”次。

据我所知,查看.render()函数提交整个传输,所以如果我写多个res.render(); res.render();不会起作用。

我是从一个完全错误的方面接近这个还是我错过了什么? 我是否需要创建一个“动态”视图,而不是一次性传递给res.render()?

感谢。

用于测试目的的附加代码:

var express=require('express');
var app=express();

// set up handlebars view engine
var handlebars = require('express-handlebars').create({ defaultLayout:'main' });

app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');


app.set('port', process.env.PORT || 8888);

app.use(express.static(__dirname+'/public'));

app.get('/', function(req, res) {
    res.render('home');
    res.render('home');
    res.render('home');
});


// 404 catch-all handler (middleware)
app.use(function(req, res, next){
    res.status(404);
    res.render('404');
});

// 500 error handler (middleware)
app.use(function(err, req, res, next){
    console.error(err.stack);
    res.status(500);
    res.render('500');
});

app.disable('x-powered-by');

app.listen(app.get('port'),function(){
    console.log('express started on port:'+app.get('port'));
});

1 个答案:

答案 0 :(得分:0)

是的,你可以,这里是我使用的一些代码帮助做到这一点。我在我的视图目录中有一个partials目录,我来自。

目录结构:

package.json
    /lib/app.js
        /templates/offering-links/handlebars
            /partials/offering-links-script/handlebars

使用部分的帮助程序代码:

function partialsHelper (request, response, next) {
        response.renderPage = function (template, options, callback) {
            var partials = (options && options.partials) || {};

            partials.footer = path.join("partials", "footer");
            partials.header = path.join("partials", "header");
            options.partials = partials;

            //disable cache for dynamic content
            if (request.method === "GET") {
                response.setHeader("Cache-Control", "no-cache");
            }
            // TODO: figure about max-age for cachable content

            return response.render(template, options, callback);
        };
        return next();
    }
    app.use(partialsHelper);

然后调用renderPage。

response.renderPage(
    "offering-links",
    {
        title: "Offering Links",
        offerings: offerings,
        partials: {
            script: path.join("partials", "offering-links-script")
        },
        baseURL: contextRoot
    }
);