溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

解決koa2 ctx.render is not a function報(bào)錯(cuò)問(wèn)題

發(fā)布時(shí)間:2020-10-23 04:16:04 來(lái)源:腳本之家 閱讀:400 作者:wopelo 欄目:web開(kāi)發(fā)

最近在學(xué)習(xí)使用koa2,在嘗試用koa2復(fù)寫(xiě)之前用express寫(xiě)的一個(gè)入口文件的時(shí)候發(fā)現(xiàn)命令行報(bào)錯(cuò)ctx.render is not a function

解決koa2 ctx.render is not a function報(bào)錯(cuò)問(wèn)題 

項(xiàng)目路徑如下

解決koa2 ctx.render is not a function報(bào)錯(cuò)問(wèn)題 

app.js是之前用express寫(xiě)的入口文件

koa.js是用koa2復(fù)寫(xiě)的入口文件

view是前端頁(yè)面文件夾,使用的模板引擎是pug

報(bào)錯(cuò)時(shí)koa.js代碼如下

//使用koa復(fù)寫(xiě)入口文件
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 首頁(yè)"
  })
});

其實(shí)這個(gè)bug很好解決,那就是把配置模板引擎的代碼移動(dòng)到所有與路由相關(guān)的代碼之前,在這里就應(yīng)該修改為

//使用koa復(fù)寫(xiě)入口文件
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);

//設(shè)置路由
router.get('/', async(ctx, next) => {
  await ctx.render("index",{
    title:"nodeWeb 首頁(yè)"
  })
});

造成這個(gè)bug的原因是因?yàn)橹虚g件的執(zhí)行是有順序的,路由在前,然后模板引擎在后的話,當(dāng)執(zhí)行到ctx.render的時(shí)候,模板引擎相關(guān)的中間件還未執(zhí)行,render方法還未綁定到ctx上,所以就會(huì)報(bào)ctx.render is not a function

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI