使用外部模塊

《學(xué)習(xí)使用外部模塊》

目標(biāo)

建立一個(gè) lesson2 項(xiàng)目另绩,在其中編寫代碼儒陨。

當(dāng)在瀏覽器中訪問(wèn) http://localhost:3000/?q=alsotang 時(shí)花嘶,輸出 alsotang 的 md5 值,即 bdd5e57b5c0040f9dc23d430846e68a3蹦漠。

挑戰(zhàn)

訪問(wèn) http://localhost:3000/?q=alsotang 時(shí)椭员,輸出 alsotang 的 sha1 值,即 e3c766d71667567e18f77869c65cd62f6a1b9ab9笛园。

知識(shí)點(diǎn)

  1. 學(xué)習(xí) req.query 的用法
  2. 學(xué)習(xí)建立 package.json 來(lái)管理 Node.js 項(xiàng)目隘击。

課程內(nèi)容

臥槽,不寫 package.json 就寫項(xiàng)目我覺(jué)得好不爽啊研铆,所以這個(gè) lesson2 我就得跟大家介紹一下 package.json 這個(gè)文件的用法了埋同。

簡(jiǎn)單說(shuō)來(lái)呢,這個(gè) package.json 文件就是定義了項(xiàng)目的各種元信息蚜印,包括項(xiàng)目的名稱莺禁,git repo 的地址留量,作者等等窄赋。最重要的是,其中定義了我們項(xiàng)目的依賴楼熄,這樣這個(gè)項(xiàng)目在部署時(shí)忆绰,我們就不必將 node_modules 目錄也上傳到服務(wù)器,服務(wù)器在拿到我們的項(xiàng)目時(shí)可岂,只需要執(zhí)行 npm install错敢,則 npm 會(huì)自動(dòng)讀取 package.json 中的依賴并安裝在項(xiàng)目的 node_modules 下面,然后程序就可以在服務(wù)器上跑起來(lái)了缕粹。

本課程的每個(gè) le
1.png
2.png
3.png

里面的示例代碼都會(huì)帶上一份 package.json稚茅,大家可以去看看它的大概樣子。

我們來(lái)新建一個(gè) lesson2 項(xiàng)目平斩,并生成一份它的 package.json亚享。

$ mkdir lesson2 && cd lesson2
$ npm init

OK,這時(shí)會(huì)要求我們輸入一些信息绘面,亂填就好了欺税,反正這個(gè)地方也不用填依賴關(guān)系。

npm init 這個(gè)命令的作用就是幫我們互動(dòng)式地生成一份最簡(jiǎn)單的 package.json 文件揭璃,initinitialize 的意思晚凿,初始化。

當(dāng)亂填信息完畢之后瘦馍,我們的目錄下就會(huì)有個(gè) package.json 文件了歼秽。

這時(shí)我們來(lái)安裝依賴,這次的應(yīng)用情组,我們依賴 expressutility 兩個(gè)模塊燥筷。

$ npm install express utility --save

這次的安裝命令與上節(jié)課的命令有兩點(diǎn)不同扛吞,一是沒(méi)有指定 registry,沒(méi)有指定的情況下荆责,默認(rèn)從 npm 官方安裝滥比,上次我們是從淘寶的源安裝的。二是多了個(gè) --save 參數(shù)做院,這個(gè)參數(shù)的作用盲泛,就是會(huì)在你安裝依賴的同時(shí),自動(dòng)把這些依賴寫入 package.json键耕。命令執(zhí)行完成之后寺滚,查看 package.json,會(huì)發(fā)現(xiàn)多了一個(gè) dependencies 字段屈雄,如下圖:

[圖片上傳失敗...(image-520e71-1584695367557)]

這時(shí)查看 node_modules 目錄村视,會(huì)發(fā)現(xiàn)有兩個(gè)文件夾,分別是 express 和 utility

image

我們開(kāi)始寫應(yīng)用層的代碼酒奶,建立一個(gè) app.js 文件蚁孔,復(fù)制以下代碼進(jìn)去:

// 引入依賴
var express = require('express');
var utility = require('utility');

// 建立 express 實(shí)例
var app = express();

app.get('/', function (req, res) {
  // 從 req.query 中取出我們的 q 參數(shù)。
  // 如果是 post 傳來(lái)的 body 數(shù)據(jù)惋嚎,則是在 req.body 里面杠氢,不過(guò) express 默認(rèn)不處理 body 中的信息,需要引入 https://github.com/expressjs/body-parser 這個(gè)中間件才會(huì)處理另伍,這個(gè)后面會(huì)講到鼻百。
  // 如果分不清什么是 query,什么是 body 的話摆尝,那就需要補(bǔ)一下 http 的知識(shí)了
  var q = req.query.q;

  // 調(diào)用 utility.md5 方法温艇,得到 md5 之后的值
  // 之所以使用 utility 這個(gè)庫(kù)來(lái)生成 md5 值,其實(shí)只是習(xí)慣問(wèn)題堕汞。每個(gè)人都有自己習(xí)慣的技術(shù)堆棧勺爱,
  // 我剛?cè)肼毎⒗锏臅r(shí)候跟著蘇千和樸靈混,所以也混到了不少他們的技術(shù)堆棧臼朗,僅此而已邻寿。
  // utility 的 github 地址:https://github.com/node-modules/utility
  // 里面定義了很多常用且比較雜的輔助方法,可以去看看
  var md5Value = utility.md5(q);

  res.send(md5Value);
});

app.listen(3000, function (req, res) {
  console.log('app is running at port 3000');
});

OK视哑,運(yùn)行我們的程序

$ node app.js

訪問(wèn) http://localhost:3000/?q=alsotang绣否,完成。

題外話

如果直接訪問(wèn) http://localhost:3000/ 會(huì)拋錯(cuò)

image

可以看到挡毅,這個(gè)錯(cuò)誤是從 crypto.js 中拋出的蒜撮。

這是因?yàn)椋?dāng)我們不傳入 q 參數(shù)時(shí),req.query.q 取到的值是 undefined段磨,utility.md5 直接使用了這個(gè)空值取逾,導(dǎo)致下層的 crypto 拋錯(cuò)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苹支,一起剝皮案震驚了整個(gè)濱河市砾隅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌债蜜,老刑警劉巖晴埂,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寻定,居然都是意外死亡儒洛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門狼速,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琅锻,“玉大人,你說(shuō)我怎么就攤上這事向胡∧张睿” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵捷枯,是天一觀的道長(zhǎng)滚秩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)淮捆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任本股,我火速辦了婚禮攀痊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拄显。我一直安慰自己苟径,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布躬审。 她就那樣靜靜地躺著棘街,像睡著了一般。 火紅的嫁衣襯著肌膚如雪承边。 梳的紋絲不亂的頭發(fā)上遭殉,一...
    開(kāi)封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音博助,去河邊找鬼险污。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛔糯。 我是一名探鬼主播拯腮,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚁飒!你這毒婦竟也來(lái)了动壤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淮逻,失蹤者是張志新(化名)和其女友劉穎狼电,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弦蹂,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肩碟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凸椿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削祈。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脑漫,靈堂內(nèi)的尸體忽然破棺而出髓抑,到底是詐尸還是另有隱情,我是刑警寧澤优幸,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布吨拍,位于F島的核電站,受9級(jí)特大地震影響网杆,放射性物質(zhì)發(fā)生泄漏羹饰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一碳却、第九天 我趴在偏房一處隱蔽的房頂上張望队秩。 院中可真熱鬧,春花似錦昼浦、人聲如沸馍资。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸟蟹。三九已至,卻和暖如春使兔,著一層夾襖步出監(jiān)牢的瞬間建钥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工火诸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锦针,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奈搜,于是被迫代替她去往敵國(guó)和親悉盆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

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