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

这在我看来似乎是一个非常基本的问题,但是我一直没有find答案。

我使用快递与ejs作为模板引擎和以下目录结构:

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

我为static文件夹定义了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')); ? 也不希望URL显示/about.ejs而是显示/about

有人能指点我的方向吗?

谢谢 !

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

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

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