解决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 相关文章推荐
在myeclipse中如何加入jquery代码提示功能
Jun 03 Javascript
JavaScript中数组继承的简单示例
Jul 29 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
AngularJS全局警告框实现方法示例
May 18 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
Jan 16 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
微信小程序实现多选框功能的实例代码
Jun 24 Javascript
Java 生成随机字符的示例代码
Jan 13 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
使用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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
短波收音机简介
2021/03/01 无线电
PHP令牌 Token改进版
2008/07/18 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
python+opencv实现阈值分割
2018/12/26 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
python实现机器人卡牌
2019/10/06 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
中学教师培训制度
2014/01/31 职场文书
安全生产汇报材料
2014/02/17 职场文书
药学职务聘任书
2014/03/29 职场文书
个人校本研修方案
2014/05/26 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书