个人比较喜欢handlebars渲染,而不喜欢ejs、jade等,所以在尝试koa2开发的时候,立马想到了集成koa-hbs模块!koa-hbs模块来自https://github.com/gilt/koa-hbs。问题是这个模块不支持koa2,但是支持koa1。然后我们会使用koa-convert模块进行转换……但是,还是有问题。关键是ctx.render方法仍然是一个生成器函数。这对我们来说并不难,翻看koa-convert模块的源码,借鉴一下,用下面的方法解决:consthbs=require('koa-hbs');constconvert=require('koa-convert');constco=require('co');app.use(convert(hbs.middleware({viewPath:__dirname+'/views',partialsPath:__dirname+'/views/partials'})));app.use(async(ctx,next)=>{ctx.render_=ctx.render;ctx.render=function(tpl,locals){returnco.call(ctx,ctx.render_(tpl,locals));}awaitnext();})另外,如果不使用koa-hbs模块,而是使用支持koa2的koa-views模块,必须使用最新的5.1.2版本(本文发布时的最新版本),或者更高版本:npmikoa-views@5.1.2我一开始使用npmikoa-views@next命令安装,结果发现不是最新的版本,我被骗了。
