解决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获取scrollHeight问题想到的标准问题
May 27 Javascript
javascript实现上传图片并预览的效果实现代码
Apr 11 Javascript
Jquery easyUI 更新行示例
Mar 06 Javascript
使用Jquery实现每日签到功能
Apr 03 Javascript
AngularJS的表单使用详解
Jun 17 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
Jul 18 Javascript
node.js中axios使用心得总结
Nov 29 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 26 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
May 08 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 Javascript
Javascript实现关闭广告效果
Jan 29 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桌面中心(一) 创建数据库
2007/03/11 PHP
php session应用实例 登录验证
2009/03/16 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
php新建文件的方法实例
2019/09/26 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python实现视频读取和转化图片
2019/12/10 Python
运动会广播稿400字
2014/01/25 职场文书
追悼会子女答谢词
2014/01/28 职场文书
我的小天地教学反思
2014/04/30 职场文书
医学求职自荐信
2014/06/21 职场文书
学校重阳节活动总结
2015/03/24 职场文书
安全生产培训心得体会
2016/01/18 职场文书
MySQL中varchar和char类型的区别
2021/11/17 MySQL