Express4.app.locals,res.locals和req.app.locals之间有什么区别?

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>&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>
      <% } %>
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.localres.local

在此输入图像描述


RIY*_*HAN 6

来自 快递文件

这里简而言之。

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