博客 / 詳情

返回

從零開始使用nodejs+ejs模板輕鬆搭建web網站

什麼是ejs

image.png

類比handlebars.js、artTemplate、jade這些模板引擎等,ejs也是一個javascript模板引擎,這裏就不比較它與其他模板引擎的性能做對比了,ejs語法過於樸實,如果你會寫html和簡單的JavaScript,或者你用jsx寫過react,那麼ejs對你來講將輕而易舉。只需簡單的兩步:

  1. 將%標籤包裹的js語法寫在html裏
  2. 將html後綴的文件後綴名替換成ejs
    它與nodejs結合開發web網站簡直天作之合,因為它是基於node生態的模板,只需簡單的配置,即可運行在node項目中。ejs將模板與數據有效結合在一起,快速高效的構建html頁面。可以將每一個ejs當做一個html或者組件來使用,具體ejs的語法使用可以查看 ejs文檔

    實戰

    第一步:使用koa來搭建一個server

    首先初始化項目,在終端依次執行

    npm init
    npm install koa 

    新建app.js入口文件,代碼如下:

    const koa = require('koa')
    const app = new koa()
    
    app.use(async(ctx, next) => {
     console.log(ctx.request.path)
     if (ctx.request.path === '/index') { // 首頁
         ctx.response.status = 200
         ctx.response.body = 'index'
     } else if (ctx.request.path === '/hello') { // hello頁
         ctx.response.status = 200
         ctx.response.body = 'hello world'
     } else {
         ctx.throw(404, 'Not found') // 404
     }
     await next()
    })
    
    app.listen(3000, function() {
     console.log('koa應用啓動!')
    })

    以上代碼所示,根據參數ctx的獲取所訪問的path路徑,然後分別對不同的路徑進行處理

終端運行

npm app.js

啓動koa服務看到如下效果:

20211011-160319202110111621316.gif

這是一個簡單的koa項目,監聽3000端開啓node服務,index頁面和hello頁面分別展示不同的內容。第一步已經完成,接下來只需將ejs模板引擎集成到koa項目裏就可以了。

第二步:集成ejs模板引擎

新建一個views目錄,在此目錄下放置所有的ejs模板文件,作為演示,我們先新建一個index.ejs,這時koa還不能識別ejs後綴的文件,我們需要藉助app.use將ejs後綴的文件註冊進入,將koa與views目錄下的所有ejs後綴文件關聯起來。

首先install一下koa-views

npm install koa-views

在app.js內增加以下代碼:

const path = require('path')

const views = require('koa-views');
app.use(views(path.join(__dirname, './views'), { extension: 'ejs' }))

並修改以下代碼

app.use(async(ctx, next) => {
    console.log(ctx.request.path)
    if (ctx.request.path === '/index') { // 首頁
        // ctx.response.status = 200
        // ctx.response.body = 'index'
        await ctx.render('index')
    } else if (ctx.request.path === '/hello') { // hello頁
        ctx.response.status = 200
        ctx.response.body = 'hello world'
    } else {
        ctx.throw(404, 'Not found') // 404
    }
    await next()
})

image.png

ctx.render('index')將index.ejs渲染成html文件,如圖:
image.png

重新運行npm app.js,啓動服務,重新刷新index頁面,會看到ejs模板已經被編譯成一個html頁面,如下圖:
20211011-1605572021101116274811.gif

將koa+ejs運用在實際項目中

如果需要快速建站,這個是一個不錯的方案,可以使用koa,那當然也可以使用node或者express框架,因為ejs就是node生態的一部分,所以使用任意node框架都可以。在實際項目中,我們可能會用到koa-router來管理多個路由,在每個路由內render對應的ejs文件,如圖所示:

image.png
demo示例

以上只是介紹如何簡單快速的搭建靜態web網站,我們實際項目中的頁面會更多更復雜,不只有靜態頁面,也會存在表單、列表等大批的頁面需要與接口對接聯調,因此也會有一些ejs模板需要做動態化處理,當然ejs模板語法也是支持的。針對如何獲取動態數據,渲染動態頁面,這裏提供兩種方案:

  1. 後端node服務直接連接數據庫,查詢數據後返回到ejs頁面,根據ejs語法,我們從路由處拿到變量後渲染在ejs模板內;這時,整個node項目前後端是不分離的,node既做後端服務,又做前端渲染,如果是複雜的項目,開發人員的開發量可能比較大,當然對於全棧開發工程師或者創業型公司,這些都不在話下。
  2. 也可以在路由內使用request庫(如ajax、axios、http、fetch)第三方接口請求,拿到數據直接渲染在ejs模板內,這樣的好處都是可以做到前後端開發分離,可以將這個node項目交給前端開發者,後端技術棧沒有限制,前端只需要像開發vue項目一樣調取接口就可以了。但是這樣的弊端就是如果接口加載過慢,會導致整個ejs頁面白屏,所以採用此方案需要格外注意渲染和加載調優。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.