解决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 相关文章推荐
一个加载js文件的小脚本
Jun 28 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
javascript产生随机数方法汇总
Jan 25 Javascript
VUEJS实战之构建基础并渲染出列表(1)
Jun 13 Javascript
JS实现字符串转驼峰格式的方法
Dec 16 Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 Javascript
Vue.js简易安装和快速入门(第二课)
Oct 17 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
vue+element表格导出为Excel文件
Sep 26 Javascript
原生js+canvas实现贪吃蛇效果
Aug 02 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
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
PHP内置加密函数详解
2016/11/20 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python strip()函数 介绍
2013/05/24 Python
python实现类的静态变量用法实例
2015/05/08 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
Django中的Model操作表的实现
2018/07/24 Python
对python函数签名的方法详解
2019/01/22 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
新闻传播专业求职信
2014/07/22 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书