首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express4。app.locals,res.locals和req.app.locals有什么区别?

Express4。app.locals,res.locals和req.app.locals有什么区别?
EN

Stack Overflow用户
提问于 2016-01-31 06:43:11
回答 2查看 20.5K关注 0票数 14

我在使用快递4的时候很困惑,我用快递生成器来生成我的项目.根文件中有app.js,路由器文件中有index.js。然而,互联网上有关快递的教程却直接在app.js中使用路由器。因此,当我想在index.js(在路由器文件中)中设置一些变量时,我使用app.locals,但它不起作用。但是当我换到另外两个时,我的ejs模板就能工作了.我很困惑。谁能告诉我它们之间的区别,以及如何正确地使用?

代码语言:javascript
复制
<!-- 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>
      <% } %>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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.localres.local的区别

票数 36
EN

Stack Overflow用户

发布于 2016-01-31 06:54:36

来自速递文件

这里简单地说。

app.locals

app.locals对象是JavaScript对象,其属性是应用程序中的局部变量。

这意味着您可以在app.js中使用locals声明一个变量,并在该脚本中访问它,或者将它传递给response object

res.locals

这样,您就可以将变量设置或发送到客户端html/view,并且只能在该view/html中使用。

例如:

代码语言:javascript
复制
app.get('/view', function(req, res) {
  res.locals.user = req.user;
});

在这里,user变量在请求view路由的html页面中可用。

req.app.locals

本地用户可以通过req.app.locals在中间件中使用;

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35111143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档