Node.js 返回的res.locals未定义

Node.js 返回的res.locals未定义,node.js,express,templating,Node.js,Express,Templating,我试图设置一些特定于响应的变量,当我从中间件中记录它时,我得到了res.locals的undefined,但是如果我从路由函数中记录它,它返回的函数很好 // 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()); a

我试图设置一些特定于响应的变量,当我从中间件中记录它时,我得到了
res.locals
undefined
,但是如果我从路由函数中记录它,它返回的函数很好

// 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')));

有什么想法吗?

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'

您将请求和响应对象向后放置。显然,如果您知道代码中的差异,命名并不重要,但最好保持正确命名

app.use( function (request, response, next) {
    // stuff
});
我想不起来了,但我相信你想要:

request.app.locals;

用我上面的例子。同样,不是100%确定。您总是可以通过控制台调出请求对象进行检查。

我刚刚在Node.js中读到了这一点,就像十秒钟前一样。不是我想问的,而是一个非常有趣的特性。我就要试试了!你到底想知道什么?为什么我似乎无法设置res.locals.res.locals只在请求的生命周期内保持。app.locals将在应用程序的生命周期内持续存在。如果您希望从您编写的中间件/模块内部存储本地数据,以便ejs模板可以访问它们(或使用本地数据的任何其他系统),请仔细检查request.app.locals(是)