微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在node.jsExpress中分配给res和res.locals之间的区别

如何解决在node.jsExpress中分配给res和res.locals之间的区别

res.locals是传递给您的应用程序正在使用的呈现引擎的对象(在本例中为ejs)。它们在渲染中将是“全局”的,因此您无需在它们之前添加任何内容即可使用它们。

假设我们希望服务器在生产模式下从S3中获取JavaScript,但在开发时使用本地副本。res.locals使这变得容易。我们将在app.js中按照以下方式使用中间件:

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

并且index.ejs会是这样的:

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

解决方法

嗨,我对Express中使用res(Express响应对象)和res.locals有一些新手问题。

在其中一个代码示例中研究nodejs时,有一个中间件(messages.js),一个服务器(app.js)和模板(messages.ejs)。查看模板的示例代码。看来尽管将message和removeMessages()分配给了res.locals。您可以使用message或removeMessages()来访问它们,而无需在呼叫之前加上本地语言。我想知道以下几点:

  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) { % %>
        <p class = '<%= message.type %>' > <%= message.string %> < /p>
    <% }) %>
    <% removeMessages(); %>
<% } %>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。