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

(38)动态视图助手

express版本:4.13.4

①作用:假如我们需要一个变量,在不同地方的模板(jade文件)都需要调用。

显然,我们不应该使用全局变量(因为可能会带来污染);

事实上,我们需要的是仅仅在模板中起作用的变量,因此视图助手的作用就在这里了。

 

 

②流程:

【1】首先,调用express模块,就像我们之前做的那样(事实上,不需要额外声明,当我们使用express框架的时候自然会调用它);

 

【2】按照正常情况,我们需要进行路由处理,当使用视图助手时,有一件很重要的事情,就是在进行任何路由处理之前使用视图助手。

 

原因在于,视图助手的处理和路由处理是类似的,他会拦截req和res请求,如果先进行路由的话,那么视图助手是不会被执行的。(即使被执行了,那么由于进行路由处理的时候,没有获取到视图助手的变量,也是不会达成预期目的的);

 

【3】当明确我们视图助手声明的位置后,我们开始写我们的视图助手:

注意,这里是动态的视图助手;

 

var app = express();    //生成一个导入的express模块的实例
//定义一个动态视图助手,这段代码要放在路由之前
app.use(function (req, res, next) {
    //这个是示例,定义一个动态视图助手变量
    res.locals.testStr = "这是一个动态视图助手变量";
    //这是示例,定义一个动态视图助手方法
    res.locals.testFun = function () {
        return "这是一动态视图助手——函数的返回值"
    };
    //这是另一种定义的方法这种方法似乎不行
/*    res.locals({
        testStr2: "动态变量2",
        testFun2: function () {
            return "动态函数2"
        }
    })*/
    //必须有next,不然后续的路由没法执行了(因为只被执行一次)
    next();
})

注意:上面的方法二,据说是可以的,但我自己验证后是不行的,如果可以的话,欢迎指正

写法很简单,app.use方法,参数是回调函数;

回调函数的参数分别是req(请求),res(回应),next(下个函数);

 

然后把变量放在res.locals之中,声明一个变量testStr,给他赋一个值。

当我们在模板里调用这个变量时,直接使用testStr就可以。

 

同理,也可以声明一个函数testFun,调用时使用testFun()来获取其返回值(当然,可能在这个函数里对testStr进行修改)。

 

 

【4】按照我找的教程,下面被注释掉的方法应该也可以,但事实上,我自己测试时,他会提示res.locals is not a function,也就是说,不能正常使用。因此我注释掉了。

 

 

【5】最后调用next(),正常执行路由(否则后面路由的代码不会被执行)。

 

 

【6】当执行render方法时,正常执行,但是在模板里,可以调用对应的变量。如果想在render里使用变量的话,那么需要这么写:

router.get('/', function (req, res, next) {  //req是请求,res是回应
    res.render('index', {
        title: res.locals.testStr
    });
});

 

【7】如果在jade模板里调用的话,只需要这么写就可以了:

h1  #{title}
时间: 2024-09-17 01:39:53

NodeJs——(15)动态视图助手的相关文章

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",  }); });

由于存储过程及触发器引用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

MySQL里动态视图的实现

需求: 用户为C/S结构,每个用户根据角色不同,能看到不同的数据.系统会根据某个标识生成一个数据内容,然后通过统一的视图来访问. 要求,不能修改视图,也不能在试图外面再嵌套一层查询. 设计: 系统通过某种方法生成一个唯一的ID(可以是应用端,也可以是数据库的uuid),然后将试图与这个id进行关联即可. 代码: drop table if exists test; create table test ( id int not null, name varchar(20) not null );

PostgreSQL 10.0 preview 功能增强 - 客户端ACL(pg_hba.conf动态视图)

标签 PostgreSQL , ACL , pg_hba.conf 背景 pg_hba.conf文件是用于控制客户端访问PostgreSQL数据库的防火墙配置(ACL),以往我们要了解数据库配置的ACL,必须打开这个文件进行查看. 例如 cat $PGDATA/pg_hba.conf # PostgreSQL Client Authentication Configuration File # ===================================================

PostgreSQL 10.0 preview 功能增强 - 动态视图pg_stat_activity新增数据库管理进程信息

标签 PostgreSQL , 10.0 , pg_stat_activity , 管理进程 , 后台进程 , 工作进程 , 并行计算进程 背景 PostgreSQL为进程模型,启动时.启动后会fork一些管理进程,以及用户连接时会产生用户的服侍进程. 例如 1. postmaster,负责监听 2. startup进程,负责recovery 3. logger, 负责写日志 4. shared buffer writer,负责通过LRU算法刷脏页,持久化数据文件 5. wal buffer w

php 实现MySQL里动态视图代码

系统通过某种方法生成一个唯一的ID(可以是应用端,也可以是数据库教程的uuid),然后将试图与这个id进行关联即可. 代码: drop table if exists test; create table test ( id int not null, name varchar(20) not null ); insert into test values(1,'test1'); insert into test values(1,'test11'); insert into test valu

关于oracle动态视图v$datafile和v$datafile_header(转)

v$datafile是从oracle的控制文件中获得的数据文件的信息v$datafile_header是从数据文件的头部在正常运行下,两者的检查点SCN值是一致的,但当datafile出现损坏时可以用v$datafile_header确定应用重做的起始SCN,而v$datafile可确定应用重做的结束SCN值sql> select a.name,a.checkpoint_change# "start_SCN",    > b.checkpoint_change# "

<十七>UML核心视图动态视图之时序图

一:时序图 --->时序图是用于描述按时间顺序排列的对象之间的交互模式. --->它按照参与交互的对象所具有的"生命线"和他们相互发送的消息来显示这些对象. --->时序图包含对象和主角实例,以及说明他们如何交互的消息. --->时序图描述了在参与交互的对象中所发生的事件(从激活的角度来说明),以及这些对象如何通过相互发送消息进行通信. --->时序图与协作图是可以相互转换的,与协作图不同的是,时序图强调消息事件发生的顺序,更方便于阐述时间流的过程.但是时

<十六>UML核心视图动态视图之状态图

一:状态图 --->状态图显示一个状态机. --->状态机用于对模型元素的动态性进行建模.更具体地说,就是对系统行为中受事件驱动的方面进行建模. --->通常使用状态图来说明业务角色或业务实体可能的状态----导致状态转换的事件和状态转换引起的操作 --->状态机主要用于描述对象的状态变化以确定何种行为改变了对象的状态,以及对象状态变化对系统的影响. (1)初始状态:初始状态是状态机的其实位置,他不需要事件的触发. (2)状态:状态是对象执行某项活动或等待某个事件时的条件. (3)