Node.js和Express静态中间件路由视图

时间:2012-11-17 12:28:43

标签: node.js express ejs

在我看来,这似乎是一个非常基本的问题,但我找不到答案。

我正在使用带有ejs的express作为模板引擎和以下目录结构:

 |-static
 |---css
 |---img
 |---js
 |-views

我为static文件夹定义了静态路由:

app.configure(function(){
        app.set('views', __dirname + '/views');
        app.set('view engine', 'ejs');
        app.use(express.bodyParser());
        app.use(partials());
        app.use(express.methodOverride());
        app.use(express.static(__dirname + '/static'));
        app.use(app.router);
        app.enable("jsonp callback");
    });

Views文件夹中,我保留所有ejs个文件 - 一个layout.ejs,其余文件包含特定网页的实际内容。

我已经定义了以下路线:

app.get('/', function(req,res){
    locals.date = new Date().toLocaleDateString();
    res.render('home.ejs', locals);
});

app.get('/about', function(req,res){
    locals.date = new Date().toLocaleDateString();
    res.render('about.ejs', locals);
});
app.get('/contact', function(req,res){
    locals.date = new Date().toLocaleDateString();
    res.render('contact.ejs', locals);
});

layout.ejs并将其与页面一起呈现。

显然,每次添加新页面时我都不想添加新路由,我希望它自动完成。

所以我猜它应该与定义另一个app.use(express.static(__dirname + '/views'));有关?另外,我不希望网址显示/about.ejs,而是显示/about

有人可以指出我正确的方向吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以编写自己的路由逻辑,例如

function customRouter (req, res, next)
{
    var locals = {};
    var controllerName = req.params.controllerName;
    res.render(controllerName + '.ejs', locals);
}

app.get('/:controllerName', customRouter);

这是一个简单的例子,但它应该给你一个技巧。您可以根据自己的需要进行修改。