Javascript 快递4。什么';app.locals、res.locals和req.app.locals之间的区别是什么?
我在使用express 4时感到很困惑。我使用express generator生成我的项目。根目录中有app.js,路由器文件中有index.js。然而,互联网上关于express的教程直接在app.js中使用路由器。因此,当我想在index.js(路由器文件中)中设置一些变量时,我使用app.locals,但它不起作用。但是当我换成另外两个时,我的ejs模板就可以工作了。。。我很困惑。谁能告诉我它们之间的区别以及如何正确使用Javascript 快递4。什么';app.locals、res.locals和req.app.locals之间的区别是什么?,javascript,node.js,express,Javascript,Node.js,Express,我在使用express 4时感到很困惑。我使用express generator生成我的项目。根目录中有app.js,路由器文件中有index.js。然而,互联网上关于express的教程直接在app.js中使用路由器。因此,当我想在index.js(路由器文件中)中设置一些变量时,我使用app.locals,但它不起作用。但是当我换成另外两个时,我的ejs模板就可以工作了。。。我很困惑。谁能告诉我它们之间的区别以及如何正确使用 <!-- language: index.js in rou
<!-- 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>
<% } %>
var app=需要('express');
var router=express.router();
....
router.get('/',函数(req,res,next){
var_user=req.session.user;
如果(_用户){
//没用!!
//app.locals.user=\u user;
//我不确定下面哪个用法是正确的
//1.
req.app.locals.user=\u user;
//2.
//res.locals.user=\u user;
}
}
|
- 该对象是一个JavaScript对象,其属性是应用程序中的局部变量
设置后,app.locals.title // => 'My App' app.locals.email // => 'me@myapp.com'
属性的值将在应用程序的整个生命周期内保持不变app.locals
- 与仅在请求生存期内有效的
属性相反,当您处理包含res.locals
对象的路由时,您不会在其中包含app对象,反之亦然res
- 您可以访问应用程序中呈现的模板中的局部变量。这对于为模板提供帮助函数以及应用程序级数据非常有用。可以通过
在中间件中使用局部变量(请参阅)req.app.Locals
Node.js In Action
书中的一张图片,描述了app.local
和res.local
来自
简而言之
app.locals
app.locals
对象是一个JavaScript对象,其属性是应用程序中的局部变量
app.locals.title
// => 'My App'
app.locals.email
// => 'me@myapp.com'
这意味着您可以使用locals
在app.js
中声明一个变量,并在该脚本中访问该变量或将其传递给响应对象
res.locals
有了它,您可以设置变量或将变量发送到客户端html/view,并且它仅在该视图/html中可用
e、 g
这里,用户
变量可在请求视图
路由的html页面中使用
请求本地应用程序
通过
req.app.Locals
;在中间件中可以使用局部变量,非常感谢!我现在有了更好的理解
app.get('/view', function(req, res) {
res.locals.user = req.user;
});