在nodejs中使用ejs模版

作为外部模块,调用的方法和mysql模块是相同的,不再赘述。

ejs的render函数有两个参数 第一个是字符串,第二个是可选的对象,和其他javascript模版一样需要渲染的数据也是包含在option对象中的

[javascript] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ejs.render(str,option);  
  2. // 渲染字符串 str 一般是通过nodejs文件系统的readfile方法读取  
  3. ejs.render(str,{  
  4.     data : user_data  // 需要渲染的数据  
  5. });  

当str字符串中没有包含 include 标签时,渲染数据是没有问题的,反之,就会报错。前面已经讲过我的项目文件和nodejs的安装文件不在同一个根目录下。解决这个问题需要配置option参数的filename属性。

查看ejs源码,会发现,ejs在处理include包含文件的路径时会用到一个resolveInclude函数:

[javascript] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. function resolveInclude(name, filename) {  
  2.   var path = join(dirname(filename), name);  
  3.   var ext = extname(name);  
  4.   if (!ext) path += '.ejs';  
  5.   return path;  
  6. }  
filename正是dirname函数的参数,作为nodejs核心模块的path.dirname(),返回的path总是相对nodejs的安装路径,如果不指定filename值,就会找不到文件

在使用dirname时应当注意,函数处理传入的路径参数时会截取第一个 '/' 之前的部分作为路径名例如:

[javascript] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. path.dirname('/foo/bar/baz/asdf/quux')  
  2. // returns  
  3. '/foo/bar/baz/asdf'  
要取得tpl目录可以这样写:
[javascript] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. path.dirname('/tpl/..'// return  /tpl  
完整的render函数可以这样:
[javascript] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ejs.render(str,{  
  2.     filename : path + '/tpl/..'//tpl文件中保存的是模版文件  
  3.     data: user_data  
  4. }); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值