我正在尝试设置一些特定于响应的变量,当我从中间件中记录它时,我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')));
有什么想法吗?
答案 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'