转自:https://blog.csdn.net/Elliott_Yoho/article/details/53537437

locals是Express应用中 Application(app)对象和Response(res)对象中的属性,该属性是一个对象。该对象的主要作用是,将值传递到所渲染的模板中。

locals对象

locals对象用于将数据传递至所渲染的模板中。

对于如下一个ejs模板:

<!DOCTYPE html>
<html>
<head>
<title><%= name %></title>
</head>
<body>
<h1><a href="<%= url %>"><%= name %></a></h1>
<p><%= introduce %></p>
</body>
</html>

我们可以像下面这样渲染页面,并向页面传递nameurlintroduce三个变量的值:

router.get('/', function(req, res) {
res.render('index', {name:'IT笔录', url:'http://itbilu.com', introduce:'学习、记录、整理'});
// 也可以使用 res.locals 变量
// res.locals = {
// name:'IT笔录',
// url:'http://itbilu.com',
// introduce:'学习、记录、整理'
// };
// res.render('index');
});

渲染后的页面HTML:

<!DOCTYPE html>
<html>
<head>
<title><IT笔录></title>
</head>
<body>
<h1><a href="http://itbilu.com">IT笔录</a></h1>
<p>学习、记录、整理</p>
</body>
</html>

locals对象会被传递到页面,在模板中可以直接引用该对象的属性,也可以通过该对象引用。如:<%= name %>属性同样可以通过<%= locals.name %>来引用。

app.localsres.locals

locals可能存在于app对象中即:app.locals;也可能存在于res对象中,即:res.locals。两者都会将该对象传递至所渲染的页面中。不同的是,app.locals会在整个生命周期中起作用;而res.locals只会有当前请求中起作用。由于app.locals在当前应用所有的渲染模中访问,这样我们就可以在该对象中定义一些顶级/全局的数据,并在渲染模板中使用。

在中间件中使用

我们常利用Expres的中间件将复杂的问题拆解成多个简单的问题,实现复杂的问题简单化。locals对象中样也可以应用中间件路由中间件中引用,该对象和appreqres一样可以依次传递,添加或修改其属性值后,会在后面的处理中体现出来。

如,在app中使用locals

var app = express();
app.locals.name = '这是一个APP'; // 定义可以应用整个生命周期中使用的变量
app.use(function(req, res, next) {
app.locals.name = '新名称'; // 修改
res.locals.url = 'http://itbilu.com'
next(err);
});

在路由中间件中使用locals

router.get('/', urlAndIntroduce, function(req, res) {
res.render('index', {name:'IT笔录'});
}); function urlAndIntroduce(req, res, next) {
res.locals = { url:'http://itbilu.com', introduce:'学习、记录、整理'};
}

附加

jade 中使用 moment、marked 等插件

app.js 中加上

app.locals.moment = require('moment');
app.locals.marked = require('marked');

index.jade就可以这样使用了

p #{moment(time).format('LLLL')}
.markdown-body
!= marked(content)

89.[NodeJS] Express 模板传值对象app.locals、res.locals的更多相关文章

  1. NodeJs学习记录(六)使用 res.locals 传递参数到页面

    res.locals的生命周期是单次请求,有点类似于java servlet 里的  httpServletRequest.setAttribute("param1",1); 既然 ...

  2. nodejs express 框架解密3-中间件模块

    本文档是基于express 3.4.6 的 在上篇中我们提到了中间件,这篇主要解释这个模块,middleware.js 为: var utils = require('./utils'); /** * ...

  3. nodejs express 框架解密2-如何创建一个app

    本文是基于express 3.4.6 的 1.在我们的app.js 文件里面有这么几行 http.createServer(app).listen(app.get('port'), function( ...

  4. NodeJS - Express 4.0下使用app.dynamicHelpers错误

    在NodeJS - Express 4.0下使用app.dynamicHelpers发生错误: app.dynamicHelpers({ ^ TypeError: Object function (r ...

  5. nodejs+Express中使用mustache模板引擎

    由于公司一个seo项目,需要我协助.此项目他人已经开发大半,由于seo需要,使用了服务器端模板引擎.我项目的后端同事说项目是go语音写的,跑项目麻烦,只给了我template和css等静态文件. 为了 ...

  6. 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤

    问题描述 实现部署NodeJS Express应用在App Service Linux环境中,并且使用Microsoft Authentication  Library(MSAL)来实现登录Azure ...

  7. Express中的Ejs模板传值问题

    在Ejs模板传值过程中,route下的变量值通过res.sender()中的变量参数传给views, 这时在views中若该变量在javascript代码中使用,可直接使用该变量,不必使用<% ...

  8. express 应用创建及app.js详解

    #1 express 应用创建 1.安装node.js (自行百度) 2.npm install express -g 3.全局安装express生成器 express-generator npm i ...

  9. Nodejs Express 4.X 中文API 1--- Application篇

    相关阅读: Express 4.X API 翻译[一] --  Application篇 Express4.XApi 翻译[二] --  Request篇 Express4.XApi 翻译[三] -- ...

随机推荐

  1. kentico7中设置网站的主页

    打开SiteManager,选择Settings,然后左上角选择具体的网站,Content,Web Site Content,Default alias path

  2. hdoj--1276--士兵队列训练问题(数组模拟)

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  3. 2017第33周四JDK8并发

    Java 8在Lambda表达式.接口默认方式.新的日期API等方面引入的新特性广受关注,同时在并发编程方面也做出了大量改进.以往的几个Java版本都对java.util.concurrent做了不同 ...

  4. PySide2运行出错问题解决

    PySide2是QT官方出的Python的QT封装, 不过默认安装运行时候会有一些小问题, 可能是系统里已经安装过其他版本QT的原因, 会报错如下: PySide2 qt.qpa.plugin: Co ...

  5. 运算符 and or ont

    运算符 逻辑运算: and 并且的意思. 左右两端的值必须都是真. 运算结果才是真 or 或者的意思. 左右两端有一个是真的. 结果就是真. 全部是假. 结果才能是假 not 非的意思. 原来是假. ...

  6. 解决:[WARNING] fpm_children_bury(), line 215: child 2736 (pool default) exited on signal 15 SIGTERM after 59.588363 seconds from start

    试用Nginx + PHP FastCGI 做WEB服务器,运行了几个月的时间,烦恼的是经常碰到Nginx 502 Bad Gateway 这个问题. 参考了很多修改办法,这个502的问题一直存在,今 ...

  7. Android Studio 插件 GsonFormat :你还在烦恼 为 Json格式 生成 JavaBean实体类吗?

    在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...

  8. C#获取URL参数值

    原文:C#获取URL参数值 在写程序的时候,我们经常需要对页面进行传参数,比如page?id=1234,那么在page这个页面中就直接可以使用string id = Request.QueryStri ...

  9. laydate日期范围控制

    1.html <input type="text" id="startTime" name="startTime" class=&qu ...

  10. kernel zram feature

    what is zram? Zram wiki zram zram(也称为 zRAM,先前称为 compcache)是 Linux 内核的一项功能,可提供虚拟内存压缩.zram 通过在 RAM 内的压 ...