1

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

我正在使用 expressejs作为模板引擎和以下目录结构:

 |-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

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

谢谢 !

4

1 回答 1

3

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

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

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

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

于 2012-11-17T12:55:12.740 回答