4

我想知道 Express 是否会让我创建一个默认调用的路由中间件,而无需我明确地将它放在 app.get() arg 列表中?

// NodeJS 新手

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这可能会满足我上面的简单示例。

4

3 回答 3

11
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 文档中的示例,中间件部分

于 2012-04-27T18:59:06.917 回答
4

您可以创建一种默认方式来调用您创建的每个视图,而无需为每个新条目显式创建新路由。查看以下示例:

app.get('/:viewname', function(req, res) {
    res.render(req.params.viewname, { viewname : req.params.viewname});
});

我希望你在期待。

于 2013-01-10T14:42:50.603 回答
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。或者,如果出于某种原因需要,您甚至可以在会话之前进行。

于 2013-01-10T13:38:16.003 回答