前言

最近在使用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. 使用方法1定义的变量(即在Nodejs中定义),可以使用这两种调用方法。

  2. 使用方法2定义的变量(即页面内var定义),只能使用第一种调用方法,即页面内直接写变量名使用

  3. 使用方法3定义的变量(即页面内locals定义),可以使用这两种调用方法。

  4. 其他区别:使用在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相同的效果,令所有页面模板可直接使用。

两种全局变量的区别

  1. app.locals是全应用唯一,也是全局共享,缺点是任何人修改都会影响整所有其他用户。适用于放置一些应用配置类型的常量数据。
  2. resp.locals是响应范围内的全局数据,使用与在对某一个Response处理的各个阶段共享的数据。适用于放置一些用户配置类型的数据,如授权信息,ID等。
  3. 注意:app.locals.**可以被response.locals.**的同名属性值覆盖;response.locals.**可以被render页面的renderData.**的同名属性覆盖。
  4. 上述两种全局locals,不仅可以在页面模板中使用,也可以在js代码中使用。

引用

  1. 有关app.locals的详细信息:

    http://expressjs.com/en/4x/api.html#app.locals

  2. 有关resp.locals的详细信息:

    http://expressjs.com/en/4x/api.html#res.locals

在Express的页面模板中的变量的定义与使用总结的更多相关文章

  1. SQL*Plus中替换变量与定义变量

    替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...

  2. 微信小程序中对于变量的定义

    在页面对应的js文件中: page顶部使用let定义变量,这是定义的全局变量,在当前脚本页面,任何函数中都可以直接使用变量名调用.如果做修改,就直接使用变量等于要更改的值. 使用const定义变量,就 ...

  3. PHP中的变量与常量详解

    几乎所有的编程语言都会涉及到变量和常量这两个概念,PHP也不例外.本节将介绍PHP语言中的变量和常量的应用方法. 一.什么是变量和常量 在程序执行的过程中,变量存储的值可以随时改变,而常量存储的值是不 ...

  4. PHP中的 变量 与 常量 详解

    几乎所有的编程语言都会涉及到变量和常量这两个概念,PHP也不例外.本节将介绍PHP语言中的变量和常量的应用方法. 一.什么是变量和常量 在程序执行的过程中,变量存储的值可以随时改变,而常量存储的值是不 ...

  5. php总结2——php中的变量、数据类型及转换、运算符、流程控制中的分支结构

    2.1  php中的变量: 定义变量:$变量名称=值: 变量名称:$开头    $之后的第一位必须是字母    $第二位之后可以是字母.数字或者是下划线.习惯上变量名称有实际含义,第二个单词后首字母大 ...

  6. PHP变量的定义与相应的数据类型

    在PHP中,变量的定义和C语言定义的方法是类似的,但是在PHP中,变量使用起来就非常灵活,一个变量既可以做整型,也可以是浮点型,也可以是字符串或者字符类型,通通只要在变量名前面加一个$然后加上你的变量 ...

  7. 【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html   ...

  8. MFC中成员变量的声明顺序与析构顺序

    第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...

  9. JavaScript 中的变量命名方法

    三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...

随机推荐

  1. HDU1429 bfs

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  2. IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

    编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...

  3. 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义

    为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...

  4. 获取IE浏览器关闭事件

    //关闭浏览器时才会触发此操作,刷新页面不执行 //n 检测鼠标相对于用户屏幕的水平位置 - 网页正文部分左:求出鼠标在当前窗口上的水平位置(参照:当前窗口右上角为0.0坐标) //m 网页正文全文宽 ...

  5. bootstrap-datepicker的简单使用

    先说datepicker. github上的地址是:https://github.com/eternicode/bootstrap-datepicker. 效果如下: 在bundle里面引用添加js ...

  6. //@sourceURL=filename.js

    在 console 中输入代码的最后一行加上 //@ sourceURL=filename.js, 会在 Scripts 面板中有个叫 filename.js 的文件, 然后他就和外部 js 文件一样 ...

  7. webstrom使用手册

    http://blog.csdn.net/kongjiea/article/details/48262851 http://www.jb51.net/article/58310.htm http:// ...

  8. Android测试点

    记录下之前项目测试中涉及到的Android测试点: 1.APP基本功能 按照back log整理测试用例,测试中发现有需求变动.或未考虑完全,及时更新测试用例. 测试用例包括:全功能点用例+重点功能快 ...

  9. Oracle 11g RAC使用Manual和Policy Managed方法配置(转)

    原文地址:http://czmmiao.iteye.com/blog/2128771 软件环境: 操作系统:Red Hat Enterprise Linux 5.4(Tikanga)Oracle:11 ...

  10. php5.4下配置zend guard loader

    前些日子的时候,zend官网下还没有支持PHP5.4的zend guard loader,今天再上去看的时候居然发现了,看来是我好久不关注它的缘故了... zend guard loader 干什么的 ...