解决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将搜索的关键字高亮显示实现代码
Nov 08 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
JavaScript学习总结之JS、AJAX应用
Jan 29 Javascript
jQuery获取父元素及父节点的方法小结
Apr 14 Javascript
实例解析jQuery中proxy()函数的用法
May 24 Javascript
Javascript中作用域的详细介绍
Oct 06 Javascript
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
解决AjaxFileupload 上传时会出现连接重置的问题
Jul 07 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 Javascript
javascript头像上传代码实例
Sep 28 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
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
python线程锁(thread)学习示例
2013/12/04 Python
python生成圆形图片的方法
2020/03/25 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Django在Model保存前记录日志实例
2020/05/14 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
幼儿园小班教师寄语
2014/04/03 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
早会开场白台词大全
2015/06/01 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
老乡会致辞
2015/07/28 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
go goth封装第三方认证库示例详解
2022/08/14 Golang