在Express的页面模板中的变量的定义与使用总结
前言
最近在使用Express框架中的ejs页面模板趟了些许坑,仅以本文记录总结。
本文简述的均为ejs页面模板。
创建ejs变量的各种方法
1. 在Nodejs定义的ejs变量
ejs由是在node层调用Response的render方法渲染出来的:
index.js:
var renderData = {a:1};
resp.render("/aaa/bbb/ccc", renderData);
如上例,在ejs页面中就可以直接使用变量a:
index.ejs:
<%= a %>
2. 页面内使用var定义变量
在ejs页面中使用行内模板js代码来定义变量:
index.ejs:
<% var a = 1; %>
3. 页面内给locals对象新增变量
还可以在ejs页面行内js代码中给locals对象新增属性定义变量:
index.ejs:
<% locals.a = 1; %>
使用ejs变量的各种方法
1.直接写变量名使用:
index.ejs:
<%= a %>
2.调用 locals.变量名 使用:
index.ejs:
<%= locals.a %>
并不是上述三种定义的方案都可以使用这两种调用方法
使用方法1定义的变量(即在Nodejs中定义),可以使用这两种调用方法。
使用方法2定义的变量(即页面内var定义),只能使用第一种调用方法,即页面内直接写变量名使用
使用方法3定义的变量(即页面内locals定义),可以使用这两种调用方法。
其他区别:使用在Nodejs中和页面locals中定义方法定义的变量,可以使用对
locals
对象遍历,拿到所有用户定义的变量。而使用页面内var
定义的变量,不能通过遍历locals来获取,也就是不知道用户新创建了哪些变量。
结论:
如在页面模板中,尽可能使用locals.xxx
的方式来定义变量,这样定义的变量的通用性最高。
locals中附加的系统变量
settings : {
env:"development"
etag:"weak"
jsonp callback name:"callback"
port:8222
query parser:"extended"
subdomain offset:2
trust proxy:false
view engine:"ejs"
views:"/Users/xxx/yyy/zzz"
x-powered-by:true
}
通过locals来设定全局变量
locals是express框架中提供的变量,用于在模板中定义,调用各种变量,同时也支持全局变量,可以跨页面在各个模板中均可调用访问。
1. 应用级全局变量:app.locals
这里的app变量是指:var app = express();
的app,即express实例。
通过给app.locals.xxx
设定新增属性来实现在全express应用中各个ejs页面中均可直接使用。如:
app.locals["CONFIG"] = "xxxx";
可以在任何ejs页面中可以使用<%= CONFIG %>
变量。
2. 响应级全局变量:resp.locals
这个的resp是指express的use中间件的Response对象:
app.use(function (req, resp, next) {...}
可以通过对resp.locals.xxx
设定值来实现在当前响应中
resp.locals["UID"] = "xxx";
也可以实现与app.locals
相同的效果,令所有页面模板可直接使用。
两种全局变量的区别
app.locals
是全应用唯一,也是全局共享,缺点是任何人修改都会影响整所有其他用户。适用于放置一些应用配置类型的常量数据。resp.locals
是响应范围内的全局数据,使用与在对某一个Response处理的各个阶段共享的数据。适用于放置一些用户配置类型的数据,如授权信息,ID等。- 注意:
app.locals.**
可以被response.locals.**
的同名属性值覆盖;response.locals.**
可以被render页面的renderData.**
的同名属性覆盖。 - 上述两种全局locals,不仅可以在页面模板中使用,也可以在js代码中使用。
引用
有关
app.locals
的详细信息:
http://expressjs.com/en/4x/api.html#app.locals有关
resp.locals
的详细信息:
http://expressjs.com/en/4x/api.html#res.locals
在Express的页面模板中的变量的定义与使用总结的更多相关文章
- SQL*Plus中替换变量与定义变量
替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...
- 微信小程序中对于变量的定义
在页面对应的js文件中: page顶部使用let定义变量,这是定义的全局变量,在当前脚本页面,任何函数中都可以直接使用变量名调用.如果做修改,就直接使用变量等于要更改的值. 使用const定义变量,就 ...
- PHP中的变量与常量详解
几乎所有的编程语言都会涉及到变量和常量这两个概念,PHP也不例外.本节将介绍PHP语言中的变量和常量的应用方法. 一.什么是变量和常量 在程序执行的过程中,变量存储的值可以随时改变,而常量存储的值是不 ...
- PHP中的 变量 与 常量 详解
几乎所有的编程语言都会涉及到变量和常量这两个概念,PHP也不例外.本节将介绍PHP语言中的变量和常量的应用方法. 一.什么是变量和常量 在程序执行的过程中,变量存储的值可以随时改变,而常量存储的值是不 ...
- php总结2——php中的变量、数据类型及转换、运算符、流程控制中的分支结构
2.1 php中的变量: 定义变量:$变量名称=值: 变量名称:$开头 $之后的第一位必须是字母 $第二位之后可以是字母.数字或者是下划线.习惯上变量名称有实际含义,第二个单词后首字母大 ...
- PHP变量的定义与相应的数据类型
在PHP中,变量的定义和C语言定义的方法是类似的,但是在PHP中,变量使用起来就非常灵活,一个变量既可以做整型,也可以是浮点型,也可以是字符串或者字符类型,通通只要在变量名前面加一个$然后加上你的变量 ...
- 【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html ...
- MFC中成员变量的声明顺序与析构顺序
第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...
- JavaScript 中的变量命名方法
三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...
随机推荐
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和 ...
- ios UIKit动力
UIkit动力学是UIkit框架中模拟真实世界的一些特性. UIDynamicAnimator 主要有UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性. 它一般有两种初始 ...
- IOS之富文本编辑
之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ...
- linux下实现ftp匿名用户的上传和下载文件功能
1.配置/etc//vsftpd/vsftpd.conf 文件如下: 打开文件,改变如下选项,如果文件中没有该选项,需要自己手动编写该选项 write_enable=YES anonymous_ena ...
- Java的进制转换操作(十进制、十六进制、二进制)
2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. ...
- radioButton添加试题选项webview(二)
由于项目里radioGroup里,4个选项里加载的是webview,而不是radiobutton本身自己可设置的text类型,并且每个webview都需要和radiobutton对齐,所以这个布局有点 ...
- UVa 10700 - Camel trading
题目大意:给一个不含括号.只有+和*运算的表达式,数字的范围在1到20之间,算出计算结果的可能最大值和最小值. 贪心,如果加法优先级比乘法高,那么得出的结果为最大值.(a+b)*c = a*c + b ...
- php session 生命周期代码实例
php session 生命周期代码实例 我们为什么需要Session,就是因为我们需要存储各个用户的状态数据.那么试问,如果由你来设计解决这个需求的方案,那么也许你会设置这样一个数据 ...
- LNAMP 中的PHP探针
<?php /* ----------------本探针基于YaHei.net探针------------------- */ error_reporting(0); //抑制所有错误信息 @h ...
- --@angularJS--综合小实例1
<!DOCTYPE HTML><html ng-app="myapp"><head> <title>综合小实例</title& ...