res.locals返回undefined

时间:2013-12-26 22:49:08

标签: node.js express templating

我正在尝试设置一些特定于响应的变量,当我从中间件中记录它时,我undefined获得了res.locals,但它返回如果我从路线功能中记录它,该功能就好了。

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(function (res, req, next) {
  console.log("res.locals from app.use middleware: ", res.locals);
  // res.locals.boom = 'nice';
  // res.locals.zoom = 'yeah!';
  next();
});
app.use(app.router);
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

您有自己的要求&响应对象向后。显然,如果您知道代码中的差异,命名并不重要,但最好保持正确命名。

app.use( function (request, response, next) {
    // stuff
});

我无法回想起我的头脑,但我相信你想要:

request.app.locals;

使用上面的例子。再次,不是100%肯定。您始终可以控制出要检查的请求对象。

答案 1 :(得分:2)

app.locals对象是一个JavaScript函数,当与对象一起调用时,它会将属性合并到自身中,提供了一种将现有对象公开为局部变量的简单方法。

app.locals({
  title: 'My App',
  phone: '1-250-858-9990',
  email: 'me@myapp.com'
});

app.locals.title
// => 'My App'

app.locals.email
// => 'me@myapp.com'