我在使用快递4的时候很困惑,我用快递生成器来生成我的项目.根文件中有app.js,路由器文件中有index.js。然而,互联网上有关快递的教程却直接在app.js中使用路由器。因此,当我想在index.js(在路由器文件中)中设置一些变量时,我使用app.locals,但它不起作用。但是当我换到另外两个时,我的ejs模板就能工作了.我很困惑。谁能告诉我它们之间的区别,以及如何正确地使用?
<!-- language: index.js in router file -->
var app = require('express');
var router = express.Router();
....
router.get('/', function(req, res, next) {
var _user = req.session.user;
if (_user) {
//does't work!!
//app.locals.user=_user;
//I am not sure about which usage is correct below
//1.
req.app.locals.user = _user;
//2.
// res.locals.user=_user;
}
}
<!-- language: lang-ejs -->
<% if (user) { %>
<li><a class="navbar-link">Welcome <%= user.name %></a>
</li>
<span> | </span>
<li><a href="/logout" class="navbar-link" id="logoutBtn">Logout</a>
</li>
<% } else { %>
<li><a href="#" class="navbar-link" data-toggle="modal" data-target="#signinModal">登录</a>
</li>
<span> | </span>
<li><a href="#" class="navbar-link" data-toggle="modal" data-target="#signupModal">注册</a>
</li>
<% } %>发布于 2016-01-31 06:51:24
app.locals对象是JavaScript对象,其属性是应用程序中的局部变量。
app.locals.title // => 'My‘app.locals.email // => 'me@myapp.com’
一旦设置完毕,app.locals属性值将在应用程序的整个生命周期内保持不变。res.locals相反,这些属性仅在请求的生存期内有效。当您处理有res对象的路由时,您将不会在那里有一个应用程序对象,反之亦然,用于app.locals。req.app.locals在中间件中使用(请参阅req.app)
app.locals.title = 'My App';app.locals.strftime = require('strftime');app.locals.email = 'me@myapp.com';下面是Node.js In Action书中的一幅图片,描述了app.local和res.local的区别

发布于 2016-01-31 06:54:36
来自速递文件。
这里简单地说。
app.locals
app.locals对象是JavaScript对象,其属性是应用程序中的局部变量。
这意味着您可以在app.js中使用locals声明一个变量,并在该脚本中访问它,或者将它传递给response object。
res.locals
这样,您就可以将变量设置或发送到客户端html/view,并且只能在该view/html中使用。
例如:
app.get('/view', function(req, res) {
res.locals.user = req.user;
});在这里,user变量在请求view路由的html页面中可用。
req.app.locals
本地用户可以通过req.app.locals在中间件中使用;
https://stackoverflow.com/questions/35111143
复制相似问题