res req query node app javascript node.js express

javascript - req - Diferencia entre asignar a res y res.locals en node.js(Express)



res.json express (1)

Hola, tengo algunas preguntas nuevas sobre el uso de res (objeto de respuesta Express) y res.locals en Express.

Mientras estudia nodejs en uno de los ejemplos de código Hay un middleware (messages.js), un servidor (app.js) y la plantilla (messages.ejs). Mirando el código de muestra para la plantilla. Parece que aunque los mensajes y removeMessages () están asignados a res.locals. Puede acceder a ellos usando mensajes o removeMessages () sin prefijar la llamada con los locales. Deseo saber lo siguiente:

  1. ¿Están apuntando a los mismos objetos?
  2. Si son iguales ¿Importa si asigno a res direct en lugar de res.locals?

Código de muestra

messages.js

var express = require(''express''); var res = express.response; res.message = function (msg, type) { type = type || ''info'' var sess = this.req.session; sess.messages = sess.messages || []; sess.messages.push({ type: type, string: msg }); }; res.error = function (msg) { return this.message(msg, ''error''); }; module.exports = function (req, res, next) { res.locals.messages = req.session.messages || []; res.locals.removeMessages = function () { req.session.messages = []; }; next(); };

app.js (código parcial)

var express = require(''express''); var messages = require(''./lib/messages''); var app = express(); app.use(messages);

messages.ejs

<% if(locals.messages) { %> <% messages.forEach(function (message) { % %> <p class = ''<%= message.type %>'' > <%= message.string %> < /p> <% }) %> <% removeMessages(); %> <% } %>


res.locals es un objeto que se pasa al motor de representación que usa tu aplicación (en este caso ejs ). Serán ''globales'' en el renderizado, por lo que no es necesario preceder nada para usarlos.

Digamos que queríamos que nuestro servidor recogiera nuestro JavaScript desde S3 cuando estaba en modo de producción, pero usa las copias locales cuando está en desarrollo. res.locals hace fácil. Tendríamos middleware a lo largo de estas líneas en app.js:

if (''production'' === app.get(''env'')) { res.locals.jsLocation = ''https://s3.amazonaws.com/kittens/js/'' } else { res.locals.jsLocation = ''/js/''; }

y index.ejs sería algo como esto:

<script src="<%= jsLocation %>angular.min.js"></script> <script src="<%= jsLocation %>myAngularFile.js"></script>