Nodejs學(xué)習(xí)筆記(四)--- Express安裝與模版引擎ejs

簡介及資料

Node.js提供了http模塊溉奕,這個(gè)模塊中提供了一些底層接口三痰,可以直接使用欠橘,可以看看這個(gè)
http://nodejs.org/api/http.html
Express是一個(gè)輕量級(jí)涛酗、簡潔欺矫、易用的Node.js Web MVC開發(fā)框架,它基于Node.js原有進(jìn)行了很多Web開發(fā)所需的功能封裝
http://expressjs.com/
https://www.npmjs.org/package/express

安裝

官網(wǎng)http://expressjs.com/
express4.X的有一些變化篮奄,4.x版本中將命令工具單獨(dú)分出來了(https://github.com/expressjs/generator),所有要先按裝express-generator捆愁,否則創(chuàng)建項(xiàng)目時(shí),會(huì)提示express命令沒找到

npm install -g express-generator

https://github.com/expressjs/express#quick-start

image.png
npm install -g express
image.png
查看express版本
express --version
image.png

這邊存在一個(gè)誤區(qū)窟却,網(wǎng)上很多都是直接用express -v (express -V) 這個(gè)指令昼丑,我不是很清楚是不是4.0版本之前的是識(shí)別的,但是這個(gè)指令出來是這樣的夸赫。

express -v
image.png

這里所指的 -v 是 --view.

運(yùn)行第一個(gè)基于express框架的Web

1.創(chuàng)建一個(gè)expressWebApp

到指定工作目錄下執(zhí)行

image.png

可以看到此時(shí)的package.json


image.png
2.安裝依賴項(xiàng)

我們看下這個(gè)指令菩帝,他自動(dòng)生成了一個(gè)新的package.json。

npm init
image.png
image.png

注意上一步安裝成功后的提示,需要cd到網(wǎng)站目錄呼奢,并執(zhí)行npm install命令安裝項(xiàng)目依賴項(xiàng)(可以在項(xiàng)目的package.json文件的dependencies節(jié)點(diǎn)下看到需要哪些依賴)

npm install
image.png
image.png
image.png
3.運(yùn)行app.js文件宜雀,添加監(jiān)聽啟動(dòng)服務(wù)。

在expressWebApp根目錄下找到app.js并增加端口監(jiān)聽控妻,在sublime中Ctrl+B運(yùn)行

app.listen(3000,function(){
    console.log("Server Start!");
});

image.png
image.png
4.瀏覽器訪問效果
image.png

相關(guān)提示:
  1.在sublime中運(yùn)行過后州袒,如果想要關(guān)閉揭绑,去任務(wù)管理器中結(jié)束node.exe進(jìn)程
  2.不在sublime中運(yùn)行弓候,可以在cmd中執(zhí)行node app,關(guān)閉使用快捷鍵Ctrl+C

模版引擎 ejs

ejs:Embedded JavaScript
  https://github.com/visionmedia/ejs

1.創(chuàng)建一個(gè)express + ejs的項(xiàng)目

生成環(huán)境

express -e ejsWebApp
image.png

安裝依賴

cd ejsWebApp
npm install

express參數(shù)

Usage: express [options] [dir]

  Options:

    -h, --help          output usage information
    -V, --version       output the version number
    -e, --ejs           add ejs engine support (defaults to jade)
    -H, --hogan         add hogan.js engine support
    -c, --css <engine>  add stylesheet <engine> support (less|stylus|compass) (d
efaults to plain css)
    -f, --force         force on non-empty directory
2.創(chuàng)建成功后他匪,打開app.js菇存,添加3000端口監(jiān)聽
app.listen(3000,function(){
    console.log("ejs Server Start!");
});
3.打開routes文件夾下index.js,并修改代碼如下
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: '<h1>Express</h1>'
                          ,users:[{username: 'Tiany'},
                                {username: 'Tiany Zhong'},
                                {username: 'Zhong Dian'}] 
            });
});

module.exports = router;

image.png
4.打開views文件夾下index.ejs,并修改代碼如下
<!DOCTYPE html>
<html>
  <head>    
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>

    <%= title %>
    <%- title %>
    <% users.forEach(function(user){ %>
        <h5><%= user.username %></h5>
    <% }) %>
    
  </body>
</html>
image.png
5.瀏覽器結(jié)果
node app
image.png
image.png

當(dāng)我們訪問 http://localhost:3000時(shí)邦蜜,app.js 中 app.use('/', index); 會(huì)轉(zhuǎn)到index.js依鸥,而index.js而index.ejs傳遞了title和users對象作為參數(shù),細(xì)節(jié)以后我們再探討悼沈。

這里重點(diǎn)看看index.ejs
ejs結(jié)尾的文件就是模版文件贱迟,可以看到在文件中我們用了三種標(biāo)簽方式(這種標(biāo)簽方式有過其它web開發(fā)經(jīng)驗(yàn)的應(yīng)該很好看懂)
  1.<%= %>
  這個(gè)標(biāo)簽在接到收到title: < h1 >Express< /h1 >時(shí),從顯示效果來看絮供,他直接輸出HTML標(biāo)簽到頁面上衣吠,輸出的是轉(zhuǎn)義后的變量值
  2.<%- %>   
  而這個(gè)標(biāo)簽,從顯示效果上看壤靶,他沒有直接輸出HTML代碼到頁面上缚俏,輸出的是沒有轉(zhuǎn)義后的變量值
  3.<% %>
  而這個(gè)標(biāo)簽,從顯示上看贮乳,他循環(huán)了出來參數(shù)中的值忧换,標(biāo)簽中是javascript邏輯代碼,注意括號(hào)的開閉合

express項(xiàng)目結(jié)構(gòu)

image.png

1.node_modules文件夾
這文件夾就是在創(chuàng)建完項(xiàng)目后向拆,cd到項(xiàng)目目錄執(zhí)行npm install后生成的文件夾亚茬,下載了項(xiàng)目需要的依賴項(xiàng)
2.package.json文件
此文件是項(xiàng)目的配置文件(可定義應(yīng)用程序名,版本浓恳,依賴項(xiàng)等等)
  node_modules文件夾下的依賴項(xiàng)是從哪里知道的呢才写?原因就是項(xiàng)目根目錄下的這個(gè)package.json文件,執(zhí)行npm install時(shí)會(huì)去找此文件中的dependencies奖蔓,并安裝指定的依賴項(xiàng)
3.public文件夾(包含images赞草、javascripts、stylesheets)
  這個(gè)文件夾做過Web開發(fā)的應(yīng)該一看就知道吆鹤,為了存放圖片厨疙、腳本、樣式等文件的
4.routes文件夾
  用于存放路由文件疑务,
5.views文件夾
  用于存放模版文件

express項(xiàng)目分析

先從app.js看起
  1.app.set(name,value)
  把名字為name的項(xiàng)的值設(shè)為value沾凄,用于設(shè)置參數(shù)
  app.set('views', path.join(__dirname, 'views')); 設(shè)置了模版文件夾的路徑梗醇;__dirname是node.js中的全局變量,表示取當(dāng)前執(zhí)行文件的路徑
  app.set('view engine', 'ejs'); 設(shè)置使用的模版引擎撒蟀,我們使用的ejs
  2.app.use([path], function)
  用這個(gè)方法來使用中間件叙谨,因?yàn)閑xpress依賴于connect,有大量的中間件保屯,可以通過app.use來使用手负;path參數(shù)可以不填,默認(rèn)為'/' .
  app.use(express.static(path.join(__dirname, 'public'))); 這一句中可能要注意一下姑尺,express.static( )是處理靜態(tài)請求的竟终,設(shè)置了public文件,public下所有文件都會(huì)以靜態(tài)資料文件形式返回(如樣式切蟋、腳本统捶、圖片素材等文件)


var routes = require('./routes/index');
var users = require('./routes/users');

app.use('/', routes);
app.use('/users', users);

上面代碼表示當(dāng)用戶使用/訪問時(shí),調(diào)用routes柄粹,即routes目錄下的index.js文件喘鸟,其中.js后綴省略,用/users訪問時(shí)驻右,調(diào)用routes目錄下users.js文件 
  3.app.get(name)
  獲取名為name的項(xiàng)的值
  4.路由文件index.js

router.get('/', function(req, res) {
  res.render('index', { title: '<h1>Express</h1>'
                          ,users:[{username: 'Tiany'},
                                {username: 'Tiany Zhong'},
                                {username: 'Zhong Dian'}] 
            });
});

這段表示什黑,router.get表示通過get請求/時(shí),響應(yīng)后面的function處理旺入,兩個(gè)參數(shù)分別是request兑凿、response;
res.render表示調(diào)用模版引擎解析名字index的模板茵瘾,傳并傳入了title和users兩個(gè)對象做為參數(shù)礼华;
此外 解析views目錄下的index.ejs?原因就是app.js中的設(shè)置:

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

而這兩個(gè)參數(shù)在index.ejs中可以使用,最后就是我們看到的頁面展示效果了拗秘。

內(nèi)容大多是根據(jù)書籍和網(wǎng)上資料的總結(jié)圣絮,結(jié)合自己實(shí)踐中遇到問題做了記錄和總結(jié),其中描述可能不是很準(zhǔn)確雕旨,還有許多內(nèi)容沒有細(xì)究扮匠,若是存在問題,還望大神指正建議凡涩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棒搜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子活箕,更是在濱河造成了極大的恐慌力麸,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異克蚂,居然都是意外死亡闺鲸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門埃叭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摸恍,“玉大人,你說我怎么就攤上這事赤屋×⑾猓” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵益缎,是天一觀的道長谜慌。 經(jīng)常有香客問我然想,道長莺奔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任变泄,我火速辦了婚禮令哟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妨蛹。我一直安慰自己屏富,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布蛙卤。 她就那樣靜靜地躺著狠半,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颤难。 梳的紋絲不亂的頭發(fā)上神年,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音行嗤,去河邊找鬼已日。 笑死,一個(gè)胖子當(dāng)著我的面吹牛栅屏,可吹牛的內(nèi)容都是我干的飘千。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼栈雳,長吁一口氣:“原來是場噩夢啊……” “哼护奈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哥纫,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對情侶失蹤霉旗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奖慌,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抛虫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年选脊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了港准。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凸椿。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漠魏,死狀恐怖人芽,靈堂內(nèi)的尸體忽然破棺而出掸驱,到底是詐尸還是另有隱情工碾,我是刑警寧澤庵楷,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布啦逆,位于F島的核電站伞矩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夏志。R本人自食惡果不足惜乃坤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沟蔑。 院中可真熱鬧湿诊,春花似錦、人聲如沸瘦材。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽食棕。三九已至朗和,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簿晓,已是汗流浹背眶拉。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抢蚀,地道東北人镀层。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像皿曲,于是被迫代替她去往敵國和親唱逢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容