微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解决koa2 ctx.render is not a function报错问题

最近在学习使用koa2,在尝试用koa2复写之前用express写的一个入口文件的时候发现命令行报错ctx.render is not a function

项目路径如下

文件

文件

页面文件夹,使用的模板引擎是pug

代码如下

const app = new Koa();
const router = new Router();

app.use(serve(dirname));
app.use(koaBody()).use(router.routes());
app.use(views(
dirname + '/views/pages',{
extension: 'pug'
}))

app.listen(3000);

router.get('/',async(ctx,next) => {
await ctx.render("index",{
title:"nodeWeb 首页"
})
});

其实这个bug很好解决,那就是把配置模板引擎的代码移动到所有与路由相关的代码之前,在这里就应该修改

rush:js;"> //使用koa复写入口文件 const Koa = require('koa'); const Router = require('koa-router'); const koaBody = require('koa-body'); const views = require('koa-views'); const serve = require('koa-static');

const app = new Koa();
const router = new Router();

app.use(serve(dirname));
//配置模板引擎
app.use(views(
dirname + '/views/pages',{
extension: 'pug'
}))
//使用koa-router
app.use(koaBody()).use(router.routes());

app.listen(3000);

//设置路由
router.get('/',{
title:"nodeWeb 首页"
})
});

造成这个bug的原因是因为中间件的执行是有顺序的,路由在前,然后模板引擎在后的话,当执行到ctx.render的时候,模板引擎相关的中间件还未执行,render方法还未绑定到ctx上,所以就会报ctx.render is not a function

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐