res.locals返回undefined

问题描述 投票:3回答:2

我正在尝试设置一些特定于响应的变量,当我从中间件中记录它时,我正在为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')));

有任何想法吗?

node.js express templating
2个回答
7
投票

您的请求和响应对象向后。显然,如果您知道代码中的差异,命名无关紧要,但最好保持正确命名。

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

我不记得我的头脑,但我相信你想:

request.app.locals;

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


2
投票

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

app.locals({
  title: 'My App',
  phone: '1-250-858-9990',
  email: '[email protected]'
});

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

app.locals.email
// => '[email protected]'
© www.soinside.com 2019 - 2024. All rights reserved.