express的app对象

app.engine

常规设置:

views, 放模板文件的目录,比如: app.set('views', './views')
view engine, 模板引擎,比如: app.set('view engine', 'ejs')

如上按照ejs的写法就可以渲染我们的页面的,但是很恶心,至少我觉得,个人写html习惯了,subtime还提供语法高亮和emmet快捷写法,使用ejs的写法,没颜色,没快捷。下面改造下,

app.set('views','./views');
app.set('view engine','html');
app.engine('.html',require('ejs').__express);

开始虽然知道这样写就可以了,但是总感觉理解的不到位,每次都不能自己写,换了个思路理解它.我们把模板引擎理解为一个打面机,进去的是小麦,出来的就是面粉了,市场上有很多打面机,我们怎么区分呢,自然想到起个名字,叫什么呢,为了和他所渲染的后缀名文件一致,我想要渲染html文件,那我就把这个引擎起名叫html,并在app.set('views engine') 指定。

那么问题来了,你以为把打面机名改了,你就能打面了?显然不能,我们还要继续改造一下我么的打面机(引擎),通过app.engine('.html',callback()); 那么这个引擎到底在里面做了什么工作,实现了这个转化功能呢?而且这里你渲染的是'.html' 文件,出来的也是,那还要模板引擎干什么?首先我们要理解下模板引擎在渲染模板的时候都做了什么,摘自express官网例子

var fs = require('fs'); // 此模板引擎依赖 fs 模块
app.engine('ntl', function (filePath, options, callback) { // 定义模板引擎
  fs.readFile(filePath, function (err, content) {
    if (err) return callback(new Error(err));
    // 这是一个功能极其简单的模板引擎
    var rendered = content.toString().replace('#title#', '<title>'+ options.title +'</title>')
    .replace('#message#', '<h1>'+ options.message +'</h1>');
    return callback(null, rendered);
  })
});
app.set('views', './views'); // 指定视图所在的位置
app.set('view engine', 'ntl'); // 注册模板引擎

这里看着就明显多了,模板引擎的大致作用就是读取要渲染的文件,把传入进来的后台变量,渲染成我们所要的文件,这里核心的就是把我们后台获取的内容结合模板渲染成html文件,传到客户端显示,内容通过变量解决,html标签通过渲染引擎的特殊格式语法转化,但是假如我们本来就是html标签,那就算不符合他所指定的语法,也没事,因为他本来就是,那么总结下作用:读取(fs.readfile)要渲染的文件(特殊后缀名.html .ejs .jade),渲染成我们要的(.html),而实现这个过程就要靠callback(filePath, options, callback) 这个了。而兼容express的引擎会通过require('ejs').__express返回这个回调函数,这样就实现了我们的要求。这也解释了express官网上的其它写法。

 app.engine('html', require('ejs').renderFile);
 或
 var engines = require('consolidate');
 app.engine('haml', engines.haml);
 app.engine('html', engines.hogan);

这里再复习下我原来的写法。

app.set('views','./views');
app.set('view engine','html');
app.engine('.html',require('ejs').__express);

这样我们就可以使用<%=%> 啦。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值