Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
537 views
in Technique[技术] by (71.8m points)

javascript - Express4. What's the difference between app.locals, res.locals and req.app.locals?

I am so confused while using express 4. I use express-generator to generate my project. And there are app.js in root and index.js in router file. However, the tutorial on internet about express are using router directly in app.js. So when I want to set some variables in index.js(in router file), I use app.locals, but it doesn't work. But when I change to the other two, my ejs template works... I am very confused. Anybody can tell me the difference between them and how to use correctly, please?

<!-- 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>
      <% } %>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
  • The app.locals object is a JavaScript object, and its properties are local variables within the application.

    app.locals.title
    // => 'My App' 
    app.locals.email
    // => '[email protected]'
    

    Once set, the value of app.locals properties persist throughout the life of the application

  • In contrast with res.locals properties that are valid only for the lifetime of the request. When you handle the route where you have a res object, you won't have an app object there and vice-versa for app.locals.

  • You can access local variables in templates rendered within the application. This is useful for providing helper functions to templates, as well as app-level data. Locals are available in middleware via req.app.locals (see req.app)

    app.locals.title = 'My App';
    app.locals.strftime = require('strftime');
    app.locals.email = '[email protected]';
    

One picture from Node.js In Action book as below, describe the difference of app.local and res.local

enter image description here


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...