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()