koa2使用ejs和nunjucks作為模板引擎的使用
一、使用 ejs 作為模板引擎
koa2 如果使用 ejs、jade 這種作為模板引擎的話,直接使用 koa-views 進(jìn)行模板加載即可。
比如使用 ejs :
安裝:
yarn add koa-views ejs
使用:
在使用 render 的時(shí)候,需要進(jìn)行異步文件模板讀取,因此 ctx.render 需要使用 await
const app= require('koa')();
const koaViews= require('koa-views');
const path = require('path');
app.use(koaViews(path.join(__dirname, './view'), {
extension: 'ejs'
}));
app.use( async ( ctx ) => {
const title = "postbird";
await ctx.render('index', {
title
});
});
app.listen(3000)
二、使用 nunjucks 作為模板引擎
我實(shí)在是討厭 ejs 的模板引擎語法,覺得太弱也太麻煩,而且新版本中,去除了模板繼承,很不方便。
我比較喜歡 nunjucks ,另外我發(fā)現(xiàn)了一個(gè) aui-template 的模板引擎,語法使用起來很舒服,速度也很快,可以體驗(yàn)一下。
aui-template 文檔地址:
http://aui.github.io/art-template/zh-cn/docs/
1、安裝 koa-nunjucks-2
使用 nunjucks 作為模板引擎,不需要安裝 koa-views。
并且可以借助別人封裝好的中間件 koa-nunjucks-2 來實(shí)現(xiàn),koa-nunjucks 這個(gè)名字已經(jīng)被使用,但是作為很爛,也沒維護(hù)。
有時(shí)間我會看看他的源碼,怎么加載的 nunjucks
yarn add koa-nunjucks-2
2、使用 nunjucks
const koaNunjucks = require('koa-nunjucks-2');
app.use(koaNunjucks({
ext: 'njk',
path: path.join(__dirname, './views'),
nunjucksConfig: {
trimBlocks: true
}
}));
3、渲染模板
同樣,異步文件讀取,需要使用 await 。
router.get('view', async (ctx) => {
var food = {
'ketchup': '5 tbsp',
'mustard': '1 tbsp',
'pickle': '0 tbsp'
};
await ctx.render('index',{title:'nunjucks',food});
});
4、模板語法
更多的語法可以看文檔:
https://mozilla.github.io/nunjucks/cn/templating.html#for
<body>
<h1>{{title}}</h1>
<p>循環(huán):</p>
<ul>
{% for key,value in food %}
<li>{{key}} - {{value}}</li>
{%endfor%}
</ul>
</body>
三、效果

四、問題
在使用 koa-nunjucks-2 的時(shí)候,發(fā)現(xiàn)一個(gè)問題:
app.use(nunjucks({})) 必須放在 app.use(router.routes()).use(router.allowedMethods()) 前面才能起作用,否則會報(bào)錯(cuò) ctx.render() 不是一個(gè) function。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
node.js 開發(fā)指南 – Node.js 連接 MySQL 并進(jìn)行數(shù)據(jù)庫操作
通常在NodeJS開發(fā)中我們經(jīng)常涉及到操作數(shù)據(jù)庫,尤其是 MySQL ,作為應(yīng)用最為廣泛的開源數(shù)據(jù)庫則成為我們的首選,本篇就來介紹下如何通過NodeJS來操作 MySQL 數(shù)據(jù)庫。2014-07-07
node.js部署之啟動(dòng)后臺運(yùn)行forever的方法
今天小編就為大家分享一篇node.js部署之啟動(dòng)后臺運(yùn)行forever的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
node.js使用stream模塊實(shí)現(xiàn)自定義流示例
這篇文章主要介紹了node.js使用stream模塊實(shí)現(xiàn)自定義流,結(jié)合實(shí)例形式詳細(xì)分析了node.js基于stream模塊實(shí)現(xiàn)自定義的可讀流、可寫流、可讀寫流等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
Express中使用Swagger的實(shí)現(xiàn)示例
swagger-express是一個(gè)規(guī)范和完整的框架實(shí)現(xiàn),本文主要介紹了Express中使用Swagger的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
使用pm2自動(dòng)化部署node項(xiàng)目的方法步驟
這篇文章主要介紹了使用pm2自動(dòng)化部署node項(xiàng)目的方法步驟,pm2是一個(gè)進(jìn)程管理工具,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
基于node.js的fs核心模塊讀寫文件操作(實(shí)例講解)
下面小編就為大家?guī)硪黄趎ode.js的fs核心模塊讀寫文件操作(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09

