在node.js(Express)中,将值分配给res和res.locals之间的区别

13 浏览
0 Comments

在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前缀。我想知道以下几点:

  1. 它们指向相同的对象吗?
  2. 如果它们是相同的,那么直接将其分配给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) { % %>

<%= message.string %> < /p>

<% }) %>

<% removeMessages(); %>

<% } %>

0