lwd*_*227 4 javascript node.js express
使用快递4时我很困惑.我使用快速生成器来生成我的项目.路由器文件中的root和index.js中有app.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>
<% } %>
Run Code Online (Sandbox Code Playgroud)
zan*_*ngw 20
该app.locals对象是一个JavaScript对象,其属性是应用程序中的局部变量.
app.locals.title
// => 'My App'
app.locals.email
// => 'me@myapp.com'
Run Code Online (Sandbox Code Playgroud)
设置后,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';
Run Code Online (Sandbox Code Playgroud)从一张照片Node.js In Action下面的书,描述的差异app.local和res.local
来自 快递文件。
这里简而言之。
app.locals
该app.locals对象是一个 JavaScript 对象,其属性是应用程序中的局部变量。
这意味着您可以在app.jswith 中声明一个变量locals并在该脚本中访问它或将其传递给response object.
本地资源
有了这个,您可以设置或发送变量到客户端 html/view,它仅在该视图/html 中可用。
例如
app.get('/view', function(req, res) {
res.locals.user = req.user;
});
Run Code Online (Sandbox Code Playgroud)
这里user变量在请求view路由的html 页面中可用。
req.app.locals
本地人可以通过中间件获得req.app.locals;
| 归档时间: |
|
| 查看次数: |
8459 次 |
| 最近记录: |