在node.js(Express)中,将值分配给res和res.locals之间的区别
在node.js(Express)中,将值分配给res和res.locals之间的区别
嗨,我有一些关于在Express中使用res(Express响应对象)和res.locals的新手问题。
在学习nodejs时,在其中一个代码示例中,有一个中间件(messages.js),一个服务器(app.js)和一个模板(messages.ejs)。查看模板的示例代码。尽管将messages和removeMessages()分配给了res.locals,但你可以使用messages或removeMessages()来访问它们,而无需在调用时加上locals前缀。我想知道以下几点:
- 它们指向相同的对象吗?
- 如果它们是相同的,那么直接将其分配给res而不是res.locals有关系吗?
示例代码:
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(部分代码)
var express = require('express'); var messages = require('./lib/messages'); var app = express(); app.use(messages);
messages.ejs
<% if(locals.messages) { %>
<% messages.forEach(function (message) { % %>
<% }) %>
<% removeMessages(); %>
<% } %>