时间:2021-05-18
最近在学习使用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-routerapp.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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在自己的koa2web项目中,用到了几个模块,感觉都是不错的,特地来分享下这些模块。一、前言我们都知道可以通过koa2工程名的方式来初始化koa2项目,官方为我
知会上看到有个问题《Express会被Koa2取代吗?》。刚好对Express、koa有点小研究,于是简单回答了一下。1、先说结论目前没有看到Express会被
koa2里面使用ES7的语法,如async、await所以需要运行在node7.6之后;但在node7.6之前也可以利用babel是的koa2可以运行。首先项目
一.通过koa2脚手架构建项目1.1安装koa-generator在终端输入:$npminstall-gkoa-generator1.2使用koa-genera
前言因为要使用koa2,所以要对node进行升级。(Koarequiresnodev7.6.0orhigherforES2015andasyncfunction