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:
- ¿Están apuntando a los mismos objetos?
- 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>