在我看来,这似乎是一个非常基本的问题,但我找不到答案。
我正在使用带有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
有人可以指出我正确的方向吗?
谢谢!
答案 0 :(得分:3)
您可以编写自己的路由逻辑,例如
function customRouter (req, res, next)
{
var locals = {};
var controllerName = req.params.controllerName;
res.render(controllerName + '.ejs', locals);
}
app.get('/:controllerName', customRouter);
这是一个简单的例子,但它应该给你一个技巧。您可以根据自己的需要进行修改。