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


Posted in Javascript onAugust 07, 2018

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

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

项目路径如下

解决koa2 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript使用prototype定义对象类型(转)[
Dec 22 Javascript
HTML页面如何象ASP一样接受参数
Feb 07 Javascript
Firefox outerHTML实现代码
Jun 04 Javascript
JS 文件本身编码转换 图文教程
Oct 12 Javascript
javascript控制swfObject应用介绍
Nov 29 Javascript
jQuery实现渐变下拉菜单的简单方法
Mar 11 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
Aug 03 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
Angular指令之restict匹配模式的详解
Jul 27 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
Jul 26 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 Javascript
jQuery实现简单轮播图效果
Dec 27 jQuery
使用Nuxt.js改造已有项目的方法
Aug 07 #Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 #Javascript
详解Nuxt.js部署及踩过的坑
Aug 07 #Javascript
解决vue 中 echart 在子组件中只显示一次的问题
Aug 07 #Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 #Javascript
React-router4路由监听的实现
Aug 07 #Javascript
JavaScript设计模式之职责链模式应用示例
Aug 07 #Javascript
You might like
PHP针对JSON操作实例分析
2015/01/12 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
javascript中对对层的控制
2006/12/29 Javascript
看了就知道什么是JSON
2007/12/09 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
python实现字符串和数字拼接
2020/03/02 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
台湾最大网路书店:博客来
2018/03/18 全球购物
C语言编程题
2015/03/09 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
EJB发布WEB服务一般步骤
2012/10/31 面试题
幼儿园运动会加油词
2014/02/14 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript