express框架通過ejs模板渲染輸出頁面實(shí)例分析
1、前言
上一節(jié)的get請求中,處理函數(shù)通過res.send返回了一段html代碼,這讓我們很興奮。我們終于可以給用戶返回html頁面了。
當(dāng)時(shí)例子是這么寫的,只要在send中傳入一些html格式的字符串即可。
// get router
router.get('/', function(req, res, next) {
res.send('<p>這是get請求/system返回的資源</p>')
});那我問個(gè)問題,如果我想返回給用戶的是一張學(xué)生的成績信息怎么辦?其實(shí)可以這樣寫:
router.get('/', function(req, res, next) {
res.send('<div>2004年高考成績查詢(張三)</div><table><tr><td>1</td><td>語文</td><td>135</td></tr><tr><td>2</td><td>數(shù)學(xué)</td><td>131</td></tr><tr><td>3</td><td>英語</td><td>96</td></tr><tr><td>4</td><td>理科綜合</td><td>243</td></tr></table>')
}); 這樣也是沒啥毛病吧!但最大的問題來了,一般情況數(shù)據(jù)都是動態(tài)的從數(shù)據(jù)庫獲取或計(jì)算得來的,在輸出到頁面時(shí)字符串的拼接需要通過字符串(如html標(biāo)簽)和變量組成的。但這樣的拼接工作相當(dāng)?shù)馁M(fèi)勁而且容易出錯(cuò),出錯(cuò)后有時(shí)候也不容易排查。
繞了這么久,終于可以引出本文的主題了——ejs模板。目前,我先只能這么給大家解釋ejs模板是個(gè)什么東東吧:
- 它的內(nèi)容是以html標(biāo)簽為基礎(chǔ)的,只不過加入了一些占位符(如${name})、簡單ejs邏輯(如<% if(…) { %> 等)
- 它的后綴名可以定義為.html,但初期請各位記住它的文件后綴名就是.ejs吧
- 簡單的json數(shù)據(jù) 和 ejs模板文件,在res.render方法執(zhí)行后,就能將數(shù)據(jù)套入到模板中,完成動態(tài)網(wǎng)頁的輸出。
文字描述內(nèi)容就到這里,后邊的小節(jié)基本上是以代碼+代碼注釋進(jìn)行說明,應(yīng)該是更加容易理解了。
2、創(chuàng)建ejs模板文件
在views目錄下創(chuàng)建文件,命名為score.ejs,代碼如下:
<!DOCTYPE html>
<html>
<head>
<title>成績單</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<div><%= year %>年高考成績查詢(張三)</div>
<table>
<% scores.forEach(function(item,index){ %>
<tr><td><%= index %></td><td><%=item.course %></td><td><%=item.score %></td></tr>
<% }); %>
</table>
</body>
</html>3、修改router文件,通過模板輸出響應(yīng)內(nèi)容
注意,我說的router文件,就是上篇文章中說的system.js哈。找到router.get部分,修改之前是這樣的:
router.get('/', function(req, res, next) {
res.send('<p>這是get請求/system返回的資源</p>')
});修改之后是:
router.get('/', function(req, res, next) {
//準(zhǔn)備好的數(shù)據(jù),真實(shí)的情形是從數(shù)據(jù)庫中得來的
var data = {
year:2004,
scores:[
{
course:"語文",
score: 135
},
{
course:"數(shù)學(xué)",
score:131
},
{
course:"英語",
score:96
},
{
course:"理科綜合",
score:243
}
]
};
//通過模板和數(shù)據(jù)渲染頁面
res.render('score', data);
});4、就這么簡單,啟動服務(wù),驗(yàn)證
預(yù)期的結(jié)果如下,你搞成功了嗎?
5、補(bǔ)充說明
是不是覺得成功來得很容易?
其實(shí)不然,你的成功來自于最初你使用了express-generator腳手架,還記得我在快速搭建Express開發(fā)系統(tǒng) 提到的命令:
npx express-generator --view ejs
嗎?它為我們做了多工作,具體表現(xiàn)在以下方面(看圖):
這兩句分別為我們指定了模板文件存放的路徑,和指定ejs為模板引擎。
6、寫在最后
其實(shí)ejs模板文件中的語法是非常復(fù)雜的,例如條件、循環(huán)、html富文本輸出……等,建議需要深入研究的同學(xué)可以通過這個(gè)鏈接去了解一下。
在下一篇文章中,我會將本節(jié)的表格美化一下,加上一些bootstrap樣式。因?yàn)槲以谧畛跚昂蠖送瑫r(shí)開發(fā)時(shí),也遇到過一些小問題,所以我想是值得一講的。ok,就到這里,期待下次見。
補(bǔ)充:express.render渲染ejs顯示源碼的問題解決方法
筆者在測試express框架的時(shí)候遇到的ejs顯示源碼的問題,檢查之后才發(fā)現(xiàn)在設(shè)置response的head的時(shí)候,在app.all('*', function(req, res, next)中加了一句res.header("Content-Type", "application/json;charset=utf-8");,將其注釋掉,重啟nodejs服務(wù)器,輸入路由后在瀏覽器按快捷鍵Ctrl+F5即可。
- node.js+express+mySQL+ejs+bootstrop實(shí)現(xiàn)網(wǎng)站登錄注冊功能
- node.js平臺下利用cookie實(shí)現(xiàn)記住密碼登陸(Express+Ejs+Mysql)
- 零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開發(fā)入門
- Express 框架中使用 EJS 模板引擎并結(jié)合 silly-datetime 庫進(jìn)行日期格式化的實(shí)現(xiàn)方法
- nodejs中的express-jwt的使用解讀
- NodeJS?Express使用ORM模型訪問關(guān)系型數(shù)據(jù)庫流程詳解
- NodeJs Express框架操作MongoDB數(shù)據(jù)庫執(zhí)行方法講解
- NodeJs?Express路由使用流程解析
- NodeJs Express中間件使用流程解析
- express框架+bootstrap美化ejs模板實(shí)例分析
相關(guān)文章
npm?install安裝失敗常見問題的解決辦法小結(jié)
有時(shí)候前端安裝npm install 安裝包總是安裝不上,下面這篇文章主要給大家介紹了關(guān)于npm?install安裝失敗常見問題的解決辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
nodeJs爬蟲的技術(shù)點(diǎn)總結(jié)
本篇文章給大家總結(jié)了關(guān)于nodeJs爬蟲的技術(shù)點(diǎn)的相關(guān)知識,對爬蟲有興趣的朋友可以跟著學(xué)習(xí)參考下。2018-05-05
NodeJs Express框架實(shí)現(xiàn)服務(wù)器接口詳解
最近學(xué)習(xí)了基于前后端分離的開發(fā)模式,我前端使用Vue框架,后端使用nodejs開發(fā)API接口,下面這篇文章主要給大家介紹了關(guān)于nodejs使用Express框架寫后端接口的相關(guān)資料,需要的朋友可以參考下2022-08-08
Nodejs使用exceljs實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出
在日常開發(fā)中,我們常需在后臺管理系統(tǒng)中實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出功能,以便與?Excel?文件進(jìn)行交互,本文將使用使用exceljs實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出功能,需要的可以參考下2024-03-03
Node?文件查找優(yōu)先級及?Require?方法文件查找策略
這篇文章主要介紹了Node文件查找優(yōu)先級及Require方法文件查找策略。文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09

