作为外部模块,调用的方法和mysql模块是相同的,不再赘述。
ejs的render函数有两个参数 第一个是字符串,第二个是可选的对象,和其他javascript模版一样需要渲染的数据也是包含在option对象中的
- ejs.render(str,option);
- // 渲染字符串 str 一般是通过nodejs文件系统的readfile方法读取
- ejs.render(str,{
- data : user_data // 需要渲染的数据
- });
当str字符串中没有包含 include 标签时,渲染数据是没有问题的,反之,就会报错。前面已经讲过我的项目文件和nodejs的安装文件不在同一个根目录下。解决这个问题需要配置option参数的filename属性。
查看ejs源码,会发现,ejs在处理include包含文件的路径时会用到一个resolveInclude函数:
- function resolveInclude(name, filename) {
- var path = join(dirname(filename), name);
- var ext = extname(name);
- if (!ext) path += '.ejs';
- return path;
- }
在使用dirname时应当注意,函数处理传入的路径参数时会截取第一个 '/' 之前的部分作为路径名例如:
- path.dirname('/foo/bar/baz/asdf/quux')
- // returns
- '/foo/bar/baz/asdf'
- path.dirname('/tpl/..') // return /tpl
- ejs.render(str,{
- filename : path + '/tpl/..', //tpl文件中保存的是模版文件
- data: user_data
- });