解决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读取中文cookie时的乱码问题的解决方法
Oct 14 Javascript
js控制分页打印、打印分页示例
Feb 08 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
jquery form 隐藏的input 选择
Apr 29 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 Javascript
Vue Socket.io源码解读
Feb 07 Javascript
JS使用iView的Dropdown实现一个右键菜单
May 06 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
微信小程序 自定义复选框实现代码实例
Sep 04 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
React 高阶组件HOC用法归纳
Jun 13 Javascript
使用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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
php数组查找函数总结
2014/11/18 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
Javascript之String对象详解
2016/06/08 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
python实现验证码识别功能
2018/06/07 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
python实现自动发送报警监控邮件
2018/06/21 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
应届大学生简历中的自我评价
2014/01/15 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js