解决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

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

相关文章

  • 详解一个基于套接字实现长连接的express

    详解一个基于套接字实现长连接的express

    这篇文章主要介绍了详解一个基于套接字实现长连接的express,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • node实现socket链接与GPRS进行通信的方法

    node实现socket链接与GPRS进行通信的方法

    这篇文章主要介绍了node实现socket链接与GPRS进行通信的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 深入理解nodejs搭建静态服务器(实现命令行)

    深入理解nodejs搭建静态服务器(实现命令行)

    这篇文章主要介绍了深入理解nodejs搭建静态服务器(实现命令行),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 优化Node.js Web应用运行速度的10个技巧

    优化Node.js Web应用运行速度的10个技巧

    这篇文章主要介绍了优化Node.js Web应用运行速度的10个技巧,本文讲解了从并行、异步、缓存、gzip 压缩、客户端渲染等等技巧,需要的朋友可以参考下
    2014-09-09
  • nodejs URL模块操作URL相关方法介绍

    nodejs URL模块操作URL相关方法介绍

    这篇文章主要介绍了nodejs URL模块操作URL相关方法介绍,本文讲解了parse方法、format方法、querystring方法等,需要的朋友可以参考下
    2015-03-03
  • Node.js学习之地址解析模块URL的使用详解

    Node.js学习之地址解析模块URL的使用详解

    url模块是nodejs里面的一个简单的模块,下面这篇文章主要给大家介绍了关于Node.js学习之地址解析模块URL使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • node.js抓取并分析网页内容有无特殊内容的js文件

    node.js抓取并分析网页内容有无特殊内容的js文件

    nodejs获取网页内容绑定data事件,获取到的数据会分几次相应,如果想全局内容匹配,需要等待请求结束,在end结束事件里把累积起来的全局数据进行操作,本文给大家介绍node.js抓取并分析网页内容有无特殊内容的js文件,需要的朋友参考下
    2015-11-11
  • NodeJS使用递归算法和遍历算法来遍历目录的方法

    NodeJS使用递归算法和遍历算法来遍历目录的方法

    遍历目录是操作文件时的一个常见需求,比如写一个程序,需要找到并处理指定目录下的所有JS文件时,就需要遍历整个目录,NodeJS遍历目录可以使用递归算法、遍历算法,遍历算法又分为同步遍历、异步遍历两种,本文介绍NodeJS使用递归算法和遍历算法来遍历目录的方法
    2023-11-11
  • node+experss实现爬取电影天堂爬虫

    node+experss实现爬取电影天堂爬虫

    本文给大家分享的是node+experss制作爬虫的第二篇,我们来爬取电影天堂最新更新的电影迅雷下载链接,有需要的小伙伴可以参考下
    2016-11-11
  • 学习 NodeJS 第八天:Socket 通讯实例

    学习 NodeJS 第八天:Socket 通讯实例

    本篇文章主要介绍了学习 NodeJS 第八天:Socket 通讯实例,非常具有实用价值,需要的朋友可以参考下。
    2016-12-12

最新评论