gpt4 book ai didi

javascript - express 4。 app.locals、res.locals 和 req.app.locals 之间有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 22:55:34 33 4
gpt4 key购买 nike

我在使用 express 4 时很困惑。我使用 express-generator 来生成我的项目。根目录下有app.js,路由器文件有index.js。但是网上关于express的教​​程都是直接在app.js中使用router。因此,当我想在 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>&nbsp;|&nbsp;</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>&nbsp;|&nbsp;</span>
<li><a href="#" class="navbar-link" data-toggle="modal" data-target="#signupModal">注册</a>
</li>
<% } %>

最佳答案

  • app.locals object 是一个 JavaScript 对象,它的属性是应用程序中的局部变量。

    app.locals.title
    // => 'My App'
    app.locals.email
    // => 'me@myapp.com'

    一旦设置,app.locals 属性的值将在应用程序的整个生命周期中持续存在

  • 与仅在请求的生命周期内有效的 res.locals 属性相反。当您处理具有 res 对象的路由时,那里不会有 app 对象,反之亦然 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.localres.local的区别

enter image description here

关于javascript - express 4。 app.locals、res.locals 和 req.app.locals 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35111143/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com