Expresso 4. Qual é a diferença entre a aplicação.locais, res, locais e req.aplicacao.locais?

Estou tão confuso ao usar o expresso 4. Eu uso express-generator para gerar o meu projecto. E há app.Js No root e no índice .js no ficheiro do router. No entanto,o tutorial na internet sobre o express está a usar o router directamente na aplicação .js . Então, quando eu quiser definir algumas variáveis no índice .js (no ficheiro de router), eu uso a aplicação.locais, mas não funciona. Mas quando mudo para os outros dois, o meu modelo ejs funciona... Estou muito confuso. Qualquer um pode me dizer a diferença entre eles e como usar corretamente, por favor?

<!-- 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>
      <% } %>
Author: Asieh hojatoleslami, 2016-01-31

2 answers

  • A app.locals objeto é um objeto JavaScript, e suas propriedades são variáveis locais dentro da aplicação.

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

    Uma vez definido, o valor de app.locals Propriedades persistem ao longo da vida da aplicação

  • Em contraste com res.locals propriedades que são válidas apenas para o tempo de vida do pedido. Quando você lidar com a rota onde você tem um objeto res, Você não terá um objeto app lá e vice-versa para app.locals.

  • Você pode acessar variáveis locais em modelos renderizados dentro da aplicação. Isto é útil para fornecer funções auxiliares para modelos, bem como dados app-level. Os locais estão disponíveis no middleware via req.app.locals (ver req.aplicação)

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

Uma imagem de Node.js In Action livro como abaixo, descrever a diferença de app.local e res.local

enter image description here

 26
Author: zangw, 2017-10-12 19:59:22

De documentação expressa.

Em resumo.

App.locais

O objeto app.locals é um objeto JavaScript, e suas propriedades são variáveis locais dentro da aplicação.

Isto significa que você pode declarar uma variável no seu app.js com locals e acessá-la dentro desse script ou passá-la para o response object.

Res. locais

Com isto, poderá definir ou enviar variáveis para o lado do cliente html / view e é apenas disponível nessa janela / html.

Por exemplo

app.get('/view', function(req, res) {
  res.locals.user = req.user;
});

Aqui a variável user está disponível na sua página html a pedir a rota view.

Req.aplicacao.locais

Os locais estão disponíveis no middleware via req.app.locals;
 4
Author: RIYAJ KHAN, 2019-02-14 17:00:29