解决koa2 ctx.render is not a function报错问题
程序员文章站
2022-12-31 15:55:08
最近在学习使用koa2,在尝试用koa2复写之前用express写的一个入口文件的时候发现命令行报错ctx.render is not a function
&nb...
最近在学习使用koa2,在尝试用koa2复写之前用express写的一个入口文件的时候发现命令行报错ctx.render is not a function
项目路径如下
app.js是之前用express写的入口文件
koa.js是用koa2复写的入口文件
view是前端页面文件夹,使用的模板引擎是pug
报错时koa.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(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很好解决,那就是把配置模板引擎的代码移动到所有与路由相关的代码之前,在这里就应该修改为
//使用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('/', async(ctx, next) => { await ctx.render("index",{ title:"nodeweb 首页" }) });
造成这个bug的原因是因为中间件的执行是有顺序的,路由在前,然后模板引擎在后的话,当执行到ctx.render的时候,模板引擎相关的中间件还未执行,render方法还未绑定到ctx上,所以就会报ctx.render is not a function
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 更换手机号码新浪微博的手机绑定如何解除
推荐阅读
-
Android开发解决popupWindow重叠报错问题
-
C#中Convert.ToDecimal()报错问题的解决
-
illegal opcode 红屏报错(hp 360 G6安装win2003)问题解决方法
-
mysql报错1033 Incorrect information in file: ‘xxx.frm’问题的解决方法
-
解决vue项目报错webpackJsonp is not defined问题
-
win7下docker安装与报错问题的解决方法
-
解决vue 引入子组件报错的问题
-
vue 解决循环引用组件报错的问题
-
解决vue v-for 遍历循环时key值报错的问题
-
一个函数解决SQLServer中bigint 转 int带符号时报错问题