nodejs express的静态动态视图助手笔记

1、引子

express的视图助手可以全局控制整个app的视图变量、方法,比如每个模板都需要引入app的名称和输出请求地址:

// /view/1
app.get("/view/1", function(request, response) {
 response.render("view1", {
  title: "app名称",
  url: request.url,
  view: "view1",
 });
});
 
// /view/2
app.get("/view/2", function(request, response) {
 response.render("view2", {
  title: "app名称",
  url: request.url,
  view: "view2",
 });
});

如上,模板变量title是静态变量,url是动态变量,这两个变量都是公用的变量,可以将它们提取出来。

2、静态视图助手

静态视图助手指的是该视图变量、方法与请求无关,一般指的是项目的名称、地址等配置参数或者是公共的方法,这些变量、方法只能用在模板视图里面,如果想在项目其他地方使用公共的变量、方法可以在global下新增全局变量、方法(参考:nodejs学习9:express本地、响应全局变量)。

在app对象下定义静态视图助手:

// 定义静态视图助手变量
app.locals.staticVar = "static var";
 
// 定义静态视图助手方法
app.locals.staticFn = function() {
 return "static function";
}
 
app.locals({
 // 定义静态视图助手变量2
 staticVar2: "static var 2",
 // 定义静态视图助手方法2
 staticFn2: function() {
  return "static function 2";
 },
});

定义的静态视图变量、方法和模板变量、方法一样用,例在jade模板引擎下:

h1=staticVar
h1=staticFn()
 
h1=staticVar2
h1=staticFn2()
 
h1=templateVar
h1=templateFn()

3、动态视图助手

动态视图助手指的是该视图变量、方法与请求有关,一般用来解析请求信息,如用户登录信息、请求地址等。

在response对象定义动态视图助手:

app.use(function(request, response, next) {
 // 定义动态视图助手变量
 response.locals.dynamicVar = "dynamic var";
 
 // 定义动态视图助手方法
 response.locals.dynamicFn = function() {
  return "dynamic function";
 }
 
 response.locals({
  // 定义动态视图助手变量2
  dynamicVar2: "dynamic var 2",
  // 定义动态视图助手方法2
  dynamicFn2: function() {
   return "dynamic function 2";
  },
 });
 
 // 不要忘记 next()
 next();
});

定义的动态视图变量、方法和静态视图变量方法以及模板变量、方法一样用,例在jade模板引擎下:

h1=dynamicVar
h1=dynamicFn()

h1=dynamicVar2
h1=dynamicFn2()

h1=templateVar
h1=templateFn()

时间: 2024-10-14 08:00:41

nodejs express的静态动态视图助手笔记的相关文章

NodeJs——(15)动态视图助手

(38)动态视图助手 express版本:4.13.4 ①作用:假如我们需要一个变量,在不同地方的模板(jade文件)都需要调用. 显然,我们不应该使用全局变量(因为可能会带来污染): 事实上,我们需要的是仅仅在模板中起作用的变量,因此视图助手的作用就在这里了.     ②流程: [1]首先,调用express模块,就像我们之前做的那样(事实上,不需要额外声明,当我们使用express框架的时候自然会调用它):   [2]按照正常情况,我们需要进行路由处理,当使用视图助手时,有一件很重要的事情,

Nodejs+express+html5 实现拖拽上传_node.js

一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.NodeJs基础知识 nodejs简单来说就是一个可以让j

动态网页设计笔记

动态网页设计笔记    JavaScript.ASP.ASP.Net.JSP笔记   JavaScript ASP.net ASP 1.基本控件的使用6.客户端脚本的基本对象    ***41.常用的Javascript内建类的方法  ***2.让TextArea自动换行3.让TextArea支持Table键4.复制数据到剪贴板5.得到当前选中的文本7.保护自己编写的HTML和脚本的方法8.IE地址栏前换成自己的图标9.可以在收藏夹中显示出你的图标10.关闭输入法11.直接查看源代码12.在Ja

Nodejs express框架一个工程中同时使用ejs模版和jade模版_node.js

在某些项目中,比如你接手了一个别人的项目然后你不想用蛋疼的ejs,或者你不想用蛋疼的jade.你有不想重写之前的页面,那么你现在可能需要新引入ejs或者jade模块,你仅仅需要做下面两步也许就能完成使用两个模版的工作 1.consolidate.js cd 到项目目录: npm install consolidate --save 打开项目的app.js(也许你的叫其他名字) 把app.js的形如下面的代码片段 app.set('view engine', 'jade'); 改为 var eng

基于nodejs+express(4.x+)实现文件上传功能_node.js

Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新.基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术.在Express4时,替换掉中件间库connect,而改用多个更细粒度的库来取代.带来的好处是明显地,这些中间件能更自由的更新和发布,不会受到Express发布周期的影响:但问题也是很的棘手,不兼容于之前的版本,升级就意味着要修改代码. 通过一段时间的查阅资料.摸索,我发现实现上传的方式有:1.expres

Win7下NodeJs+Express使用教程及数据库操作类整理

首先我们来看看安装 nodejs及框架express的步骤 从node官网下载安装文件,官网地址:http://nodejs.org/ 这个安装程序也很常规,顺序点击下一步就可以,或者做一些简单的选择,无需多说,只需强调一点,其中一步如图所示:Add To Path一定要选上.这个的作用简单说就是,在windows命令行添加node相关命令,详细请自行百度. 我们非常愉快地把node安装完成,然后安装express,express是node官方唯一推荐的一个web框架,提供很多基础方便的功能.

由于存储过程及触发器引用ORACLE动态视图v$session编译不通过而执行时报错ORA-04098

    今天遇见一个很神奇的问题,ERP合同系统需要记录登录oracle数据库的用户名.IP地址.登录时间.登录客户端类型记录信息,需要创建个触发器, 在触发器中需要查询v$session视图,如下所示:  create or replace trigger EPMFRAMEWORK.PRF_OP_LOG    before delete or update on EPMFRAMEWORK.PRF_PROJECT_INFO_T    for each row      begin       i

NodeJS+Express+MongoDB

一.MongoDB MongoDB是开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序丰富:高伸缩性:MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 官网地址:http://www.mongodb.org/ github:https://github.com/mongodb/

自己在linux上编译、链接、动态库和静态库的学习笔记

在平常的项目中,我们都是使用公司要求的makefile.makedebug一类的文件,因此,在编译.链接.生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改.添加一些文件名,或许这次我们编译通过了,但是,在某一个时候,可能出现了一个问题,无论简单与否,因为平常没有留意,导致的结果可能是花了好长时间才能解决.而如果平常只是简单的留一下心,或许这些问题都是可以避免的. 因此,今天我自己使用几个文件,编译动态库.静态库以及动态库和静态库的嵌套调用等问题,尽量还原我在项