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