7

我在 express3.0rc2 上。如何使用app.locals.use(是否仍然存在)和res.locals.use

我看到了这个https://github.com/visionmedia/express/issues/1131但 app.locals.use 抛出一个错误。我假设一旦我把函数放在 app.locals.use 中,我就可以在路由中使用它。

我正在考虑添加

app.locals.use(myMiddleware(req,res,next){res.locals.uname = 'fresh'; next();})  

然后在任何路由中调用这个中间件

谢谢

4

2 回答 2

11

我正在使用 Express 3.0,这对我有用:

app.use(function(req, res, next) {
  res.locals.myVar = 'myVal';
  res.locals.myOtherVar = 'myOtherVal';
  next();
});

然后我可以访问myValmyOtherVal在我的模板中(或直接通过res.locals)。

于 2012-09-24T19:39:10.907 回答
9

如果我理解正确,您可以执行以下操作:

app.configure(function(){
  // default express config
  app.use(function (req, res, next) {
    req.custom = "some content";
    next();
  })
  app.use(app.router);
});

app.get("/", function(req, res) {
    res.send(req.custom)
});

您现在可以在每个路由中使用 req.custom 变量。确保将 app.use 函数放在路由器之前!

编辑:

好的,下次尝试:) 您可以使用中间件并在您想要的路由中指定它:

function myMiddleware(req, res, next) {
    res.locals.uname = 'fresh';
    next();
}

app.get("/", myMiddleware, function(req, res) {
    res.send(req.custom)
});

或者您可以“全局”设置它:

app.locals.uname = 'fresh';

// which is short for

app.use(function(req, res, next){
  res.locals.uname = "fresh";
  next();
});
于 2012-09-24T19:23:45.627 回答