解決koa2 ctx.render is not a function報錯問題
最近在學習使用koa2,在嘗試用koa2復寫之前用express寫的一個入口文件的時候發(fā)現(xiàn)命令行報錯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的原因是因為中間件的執(zhí)行是有順序的,路由在前,然后模板引擎在后的話,當執(zhí)行到ctx.render的時候,模板引擎相關的中間件還未執(zhí)行,render方法還未綁定到ctx上,所以就會報ctx.render is not a function
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
node實現(xiàn)socket鏈接與GPRS進行通信的方法
這篇文章主要介紹了node實現(xiàn)socket鏈接與GPRS進行通信的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05深入理解nodejs搭建靜態(tài)服務器(實現(xiàn)命令行)
這篇文章主要介紹了深入理解nodejs搭建靜態(tài)服務器(實現(xiàn)命令行),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02優(yōu)化Node.js Web應用運行速度的10個技巧
這篇文章主要介紹了優(yōu)化Node.js Web應用運行速度的10個技巧,本文講解了從并行、異步、緩存、gzip 壓縮、客戶端渲染等等技巧,需要的朋友可以參考下2014-09-09node.js抓取并分析網(wǎng)頁內容有無特殊內容的js文件
nodejs獲取網(wǎng)頁內容綁定data事件,獲取到的數(shù)據(jù)會分幾次相應,如果想全局內容匹配,需要等待請求結束,在end結束事件里把累積起來的全局數(shù)據(jù)進行操作,本文給大家介紹node.js抓取并分析網(wǎng)頁內容有無特殊內容的js文件,需要的朋友參考下2015-11-11