1、引子

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


   
   
  1. // /view/1
  2. app.get("/view/1", function(request, response) {
  3. response.render("view1", {
  4. title: "app名称",
  5. url: request.url,
  6. view: "view1",
  7. });
  8. });
  9. // /view/2
  10. app.get("/view/2", function(request, response) {
  11. response.render("view2", {
  12. title: "app名称",
  13. url: request.url,
  14. view: "view2",
  15. });
  16. });

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

2、静态视图助手

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

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


   
   
  1. // 定义静态视图助手变量
  2. app.locals.staticVar = "static var";
  3. // 定义静态视图助手方法
  4. app.locals.staticFn = function() {
  5. return "static function";
  6. }
  7. app.locals({
  8. // 定义静态视图助手变量2
  9. staticVar2: "static var 2",
  10. // 定义静态视图助手方法2
  11. staticFn2: function() {
  12. return "static function 2";
  13. },
  14. });

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


   
   
  1. h1=staticVar
  2. h1=staticFn()
  3. h1=staticVar2
  4. h1=staticFn2()
  5. h1=templateVar
  6. h1=templateFn()

3、动态视图助手

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

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


   
   
  1. app.use(function(request, response, next) {
  2. // 定义动态视图助手变量
  3. response.locals.dynamicVar = "dynamic var";
  4. // 定义动态视图助手方法
  5. response.locals.dynamicFn = function() {
  6. return "dynamic function";
  7. }
  8. response.locals({
  9. // 定义动态视图助手变量2
  10. dynamicVar2: "dynamic var 2",
  11. // 定义动态视图助手方法2
  12. dynamicFn2: function() {
  13. return "dynamic function 2";
  14. },
  15. });
  16. // 不要忘记 next()
  17. next();
  18. });

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

h1=dynamicVar
h1=dynamicFn()

h1=dynamicVar2
h1=dynamicFn2()

h1=templateVar
h1=templateFn()

4、参考资料

  1. http://expressjs.com/api.html#app.locals
  2. http://expressjs.com/api.html#res.locals
  3. http://yuezaixz.logdown.com/posts/169164-summary-of-express-frame-template-engine-a-fragment-of-a-view-the-view-helper