我想知道Express是否允许我创建一个默认调用的路由中间件,而不会将其明确地放在app.get()arg列表中?
// NodeJS newb
var data = { title: 'blah' };
// So I want to include this in every route
function a(){
return function(req, res){
req.data = data;
};
};
app.get('/', function(req, res) {
res.render('index', { title: req.data.title });
};
我知道我可以执行app.set('data', data)
并通过路线中的req.app.settings.data
访问它。这可能会满足我上面的简单例子。
答案 0 :(得分:9)
function a(req, res, next){
req.data = data;
// Update: based on latest version of express, better use this
res.locals.data = data;
next();
};
app.get('/*', a);
请参阅Express docs, Middleware section上的示例。
答案 1 :(得分:4)
您可以创建一种默认方式来调用您所创建的每个视图,而无需为每个新条目显式创建新路由。请查看以下示例:
app.get('/:viewname', function(req, res) {
res.render(req.params.viewname, { viewname : req.params.viewname});
});
我希望你在期待。
答案 2 :(得分:1)
你也可以这样做:
function my_middleware(req, res, next){
req.data = data;
if (something(res)) redirect('http://google.com'); // no access to your site
next(); // go to routes
};
app.configure(function() {
...
app.use(express.cookieParser('secret'));
app.use(express.session());
app.use(my_middleware);
app.use(app.router);
...
}
在这种情况下,当cookie和会话已经可用时调用my_middleware,但尚未处理任何路由。或者你甚至可以在会议之前做这个,如果你出于某种原因需要它。