解决koa2 ctx.render is not a function报错问题

 更新时间:2018年08月07日 11:14:21   作者:wopelo  
这篇文章主要介绍了解决koa2 ctx.render is not a function报错问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

最近在学习使用koa2,在尝试用koa2复写之前用express写的一个入口文件的时候发现命令行报错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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解用node搭建简单的静态资源管理器

    详解用node搭建简单的静态资源管理器

    本篇文章主要介绍了详解用node搭建简单的静态资源管理器,主要用node的fs模块,自己手写一个简单的静态资源管理器。有兴趣的可以了解一下
    2017-08-08
  • NodeJS父进程与子进程资源共享原理与实现方法

    NodeJS父进程与子进程资源共享原理与实现方法

    这篇文章主要介绍了NodeJS父进程与子进程资源共享原理与实现方法,结合实例形式分析了nodejs基于cluster模块实现父进程与子进程资源共享的相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • node实现简单的反向代理服务器

    node实现简单的反向代理服务器

    本篇文章主要介绍了node实现简单的反向代理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Node.js 使用jade模板引擎的示例

    Node.js 使用jade模板引擎的示例

    本篇文章主要介绍了Node.js 使用jade模板引擎的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • node.js实现端口转发

    node.js实现端口转发

    这篇文章主要为大家详细介绍了node.js实现端口转发的关键代码,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Node错误处理笔记之挖坑系列教程

    Node错误处理笔记之挖坑系列教程

    因为nodejs是单线程的,所以一旦发生错误或异常,如果没有及时被处理整个系统就会崩溃。下面这篇文章主要给大家介绍了关于Node错误处理笔记之挖坑系列的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-06-06
  • 详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据

    详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据

    这篇文章主要介绍了详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 你或许不知道的一些npm实用技巧

    你或许不知道的一些npm实用技巧

    这篇文章主要给大家介绍了一些你或许不知道的npm实用技巧,分享一些 npm 包管理工具的实用小窍门,希望能够略微提高下前端、Node.js 开发者的生活质量,需要的朋友可以参考下
    2019-07-07
  • node下使用UglifyJS压缩合并JS文件的方法

    node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • NodeJS实现自定义流的方法

    NodeJS实现自定义流的方法

    在 NodeJS 中要想实现自定义流,需要依赖模块 stream ,直接引入,不需下载,所有种类的流都是继承这个模块内部提供的对应不同种类的类来实现的。接下来通过本文给大家介绍NodeJS实现自定义流的方法,一起看看吧
    2018-08-08

最新评论