解决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 相关文章推荐
extJs 常用到的增,删,改,查操作代码
Dec 28 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
AngularJS监听路由的变化示例代码
Sep 23 Javascript
Bootstrap输入框组件简单实现代码
Mar 06 Javascript
JavaScript模块详解
Dec 18 Javascript
Vue框架里使用Swiper的方法示例
Sep 20 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
Jan 07 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
Jun 22 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 Javascript
Node.js创建一个Express服务的方法详解
Jan 06 Javascript
关于vue的列表图片选中打钩操作
Sep 09 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程序
2006/10/09 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
Python中的自省(反射)详解
2015/06/02 Python
python访问抓取网页常用命令总结
2017/04/11 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
高中生学习生活的自我评价
2013/10/09 职场文书
酒店出纳岗位职责
2013/12/29 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
政治思想表现评语
2014/05/04 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers