解决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 相关文章推荐
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
Dec 09 Javascript
基于jquery的跟随屏幕滚动代码
Jul 24 Javascript
javascript右下角弹层及自动隐藏(自己编写)
Nov 20 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
vue.js+boostrap项目实践(案例详解)
Sep 21 Javascript
一个极为简单的requirejs实现方法
Oct 20 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
Feb 16 Javascript
这15个Vue指令,让你的项目开发爽到爆
Oct 11 Javascript
javascript json对象小技巧之键名作为变量用法分析
Nov 11 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
Feb 09 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
Jun 16 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+Html+缓存
2006/12/20 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
php查询whois信息的方法
2015/06/08 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
PHP的全局错误处理详解
2016/04/25 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
js如何打印object对象
2015/10/16 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
Python实现的爬虫功能代码
2017/06/24 Python
Python----数据预处理代码实例
2019/03/20 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
实例代码讲解Python 线程池
2020/08/24 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
实现中国梦思想汇报2014
2014/09/13 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
公司档案管理制度
2015/08/05 职场文书
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android