node基礎(chǔ)下

Express 簡(jiǎn)介

通俗的理解: Express 的作用和 Nodejs 內(nèi)置的 http 模塊類似,是專門用來(lái)創(chuàng)建 Web 服務(wù)器的.

Express 的本質(zhì):就是一個(gè)npm 上的第三方包楚堤,提供了快速創(chuàng)建 Web 服務(wù)器的便捷方法

有了 http 內(nèi)置模塊塞淹,為什么還有用 Express

htp 內(nèi)置模塊用起來(lái)很復(fù)雜,開發(fā)效率低晌畅,Express 是基于內(nèi)置的 http 模塊進(jìn)一步封裝出來(lái)的疹味,能夠極大的提高開發(fā)效率

Express 能做什么

1. Web 網(wǎng)站服務(wù)器: 專門對(duì)外提供 Web 網(wǎng)頁(yè)資源的服務(wù)器

2. API 接口服務(wù)器:專門對(duì)外提供 API 接口的服務(wù)器

使用 Express耍目,我們可以方便蚪黑、快速的創(chuàng)建 Web 網(wǎng)站的服務(wù)器或 API 接口的服務(wù)器

獲取URL中的動(dòng)態(tài)參數(shù):?app.get( ' /user/:d' , (req, res) => {})

創(chuàng)建一個(gè)靜態(tài)資源目錄: app.use("路由",express.static("資源路徑") )

nodemon自動(dòng)重啟

將 node 命令替換為 nodemon 命令盅惜,使用 nodemon app.js 來(lái)啟動(dòng)項(xiàng)目。

好處:代碼被修改之后忌穿,會(huì)被 nodemon 監(jiān)聽到抒寂,從而實(shí)現(xiàn)自動(dòng)重啟項(xiàng)目的效果。

Express 中的路由: 3 部分組成伴网,分別是請(qǐng)求的類型、請(qǐng)求的 URL 地址妆棒、處理函數(shù)

模塊化路由

1. 創(chuàng)建路由模塊對(duì)應(yīng)的js 文件

2. 調(diào)用 express.Router() 函數(shù)創(chuàng)建路由對(duì)象

3. 向路由對(duì)象上掛載具體的路由

4. 使用 module.exports 向外共享路由對(duì)象

5. 使用app.use()函數(shù)注冊(cè)路由模塊

app.use() 函數(shù)的作用澡腾,就是來(lái)注冊(cè)全局中間件

Express 中間件的調(diào)用流程:?當(dāng)一個(gè)請(qǐng)求到達(dá)Express的服務(wù)器之后,可以連續(xù)調(diào)用多個(gè)中間件糕珊,從而對(duì)這次請(qǐng)求進(jìn)行預(yù)處理动分。

Express 中間件的格式:?中間件函數(shù)的形參列表中,必須包含 next 參數(shù)红选。而路由處理函數(shù)中只包含 req 和res

next函數(shù)的作用

next 函數(shù)是實(shí)現(xiàn)多個(gè)中間件連續(xù)調(diào)用的關(guān)鍵澜公,它表示把流轉(zhuǎn)關(guān)系轉(zhuǎn)交給下一個(gè)中間件或路由

全局生效的中間件

客戶端發(fā)起的任何請(qǐng)求,到達(dá)服務(wù)器之后,都會(huì)觸發(fā)的中間件坟乾,叫做全局生效的中間件.通過(guò)調(diào)用 app.use(中間件函數(shù))迹辐,即可定義一個(gè)全局生效的中間件

中間件的作用

多個(gè)中間件之間,共享同一份 req 和 res甚侣∶鞣裕基于這樣的特性,我們可以在上游的中間件中殷费,統(tǒng)一為 req 或 res 對(duì)象添加自定義的屬性或方法印荔,供下游的中間件或路由進(jìn)行使用。

局部生效的中間件

不使用 app.use()定義的中間件详羡,叫做局部生效的中間件

中間件的5個(gè)使用注意事項(xiàng)

1. 一定要在路由之前注冊(cè)中間件

2. 客戶端發(fā)送過(guò)來(lái)的請(qǐng)求仍律,可以連續(xù)調(diào)用多個(gè)中間件進(jìn)行處理

3. 執(zhí)行完中間件的業(yè)務(wù)代碼之后,不要忘記調(diào)用 next0 函數(shù)

4.為了防止代碼邏輯混亂实柠,調(diào)用 next0 函后不要再寫額外的代碼

5. 連續(xù)調(diào)用多個(gè)中間件時(shí)水泉,多個(gè)中間件之間,共享 req 和 res 對(duì)象

中間件的分類

1.? 應(yīng)用級(jí)別的中間件

2. 路由級(jí)別的中間件

3. 錯(cuò)誤級(jí)別的中間件(除了錯(cuò)誤的中間件放到所有路由之后,其他的都放到路由之前)

4. Express 內(nèi)置的中間件 (static, json,urlencoded,)

5. 第三方的中間件

第三方的中間件

1. 運(yùn)行 npm install 中間件

2. 使用 require 導(dǎo)入中間件

3. 調(diào)用 app.use()注冊(cè)并使用中間件

監(jiān)聽req的data事件

req.on('data',(a)=>{})

req.on('end',(a)=>{})

接口的跨域問題

1. CORS (主流的解決方案主到,推薦使用)

2. JSONP (有缺陷的解決方案: 只支持 GET 請(qǐng)求)

簡(jiǎn)單請(qǐng)求和預(yù)檢請(qǐng)求的區(qū)別

簡(jiǎn)單請(qǐng)求的特點(diǎn): 客戶端與服務(wù)器之間只會(huì)發(fā)生一次請(qǐng)求茶行。

預(yù)檢請(qǐng)求的特點(diǎn): 客戶端與服務(wù)器之間會(huì)發(fā)生兩次請(qǐng)求,OPTION 預(yù)檢請(qǐng)求成功之后登钥,才會(huì)發(fā)起真正的請(qǐng)求

服務(wù)端染的 Web 開發(fā)模式

服務(wù)端渲染的概念:服務(wù)器發(fā)送給客戶端的 HTML 頁(yè)面畔师,是在服務(wù)器通過(guò)字符串的拼接,動(dòng)態(tài)生成的牧牢。因此看锉,客戶端不需要使用 Ajax這樣的技術(shù)額外請(qǐng)求頁(yè)面的數(shù)據(jù)。

優(yōu)點(diǎn):

1. 前端耗時(shí)少塔鳍。因?yàn)榉?wù)器端負(fù)責(zé)動(dòng)態(tài)生成 HTML 內(nèi)容伯铣,瀏覽器只需要直接染頁(yè)面即可。尤其是移動(dòng)端轮纫,更省電腔寡。

2. 有利于SEO。因?yàn)榉?wù)器端響應(yīng)的是完整的 HTML 頁(yè)面內(nèi)容掌唾,所以爬蟲更容易爬取獲得信息放前,更有利于 SEO。

缺點(diǎn):

1. 占用服務(wù)器端資源糯彬。即服務(wù)器端完成 HTML頁(yè)面內(nèi)容的拼接凭语,如果請(qǐng)求較多,會(huì)對(duì)服務(wù)器造成一定的訪問壓力撩扒。不利于前后端分離似扔,開發(fā)效率低。

2. 使用服務(wù)器端渲染,則無(wú)法進(jìn)行分工合作炒辉,尤其對(duì)于前端復(fù)雜度高的項(xiàng)目豪墅,不利于項(xiàng)目高效開發(fā)。

前后端分離開發(fā)模式

優(yōu)點(diǎn):

1. 開發(fā)體驗(yàn)好辆脸。前端專注于 UI頁(yè)面的開發(fā)但校,后端專注于api 的開發(fā),且前端有更多的選擇性啡氢。用戶體驗(yàn)好状囱。Ajax 技術(shù)的廣泛應(yīng)用,極大的提高了用戶的體驗(yàn)倘是,可以輕松實(shí)現(xiàn)頁(yè)面的局部刷新2. 減輕了服務(wù)器端的渲染壓力亭枷。因?yàn)轫?yè)面最終是在每個(gè)用戶的瀏覽器中生成的。

缺點(diǎn):

1. 不利于 SEO搀崭。因?yàn)橥暾?HTML 頁(yè)面需要在客戶端動(dòng)態(tài)拼接完成叨粘,所以爬蟲對(duì)無(wú)法爬取頁(yè)面的有效信息。(解決方1案:利用VueReact等前端框架的 SSR (server side render)技術(shù)能夠很好的解決 SEO 問題!)

身份認(rèn)證

1. 服務(wù)端渲染推薦使用 Session 認(rèn)證機(jī)制

2. 前后端分離推薦使用 JWT 認(rèn)證機(jī)制

什么是 Cookie(用于驗(yàn)證用戶身份)

Cookie 是存儲(chǔ)在用戶瀏覽器中的一段不超過(guò) 4 KB 的字符串瘤睹。它由一個(gè)名稱(Name)升敲、一個(gè)值(Value) 和其它幾個(gè)用于控制 Cookie 有效期、安全性轰传、使用范圍的可選屬性組成驴党。

不同域名下的 Cookie 各自獨(dú)立,每當(dāng)客戶端發(fā)起請(qǐng)求時(shí)获茬,會(huì)自動(dòng)把當(dāng)前域名下所有未過(guò)期的 Cookie 一同發(fā)送到服務(wù)器港庄。

Cookie的幾大特性:

1. 自動(dòng)發(fā)送

2. 域名獨(dú)立

3. 過(guò)期時(shí)限

4. 4KB 限制

Cookie 不具有安全性

由于 Cookie 是存儲(chǔ)在瀏覽器中的,而且瀏覽器也提供了讀寫 Cookie 的 API恕曲,因此 Cookie 很容易被偽造鹏氧,不具有安全性。因此不建議服務(wù)器將重要的隱私數(shù)據(jù)佩谣,通過(guò) Cookie 的形式發(fā)送給瀏覽器把还。

Session 認(rèn)證機(jī)制局限性

Session 認(rèn)證機(jī)制需要配合 Cookie 才能實(shí)現(xiàn)。由于 Cookie 默認(rèn)不支持跨域訪問茸俭,所以吊履,當(dāng)涉及到前端跨城請(qǐng)求后端接口的時(shí)候,需要做很多額外的配置瓣履,才能實(shí)現(xiàn)跨域 Session 認(rèn)證率翅。

注意:

1. 當(dāng)前端請(qǐng)求后端接口不存在跨域問題的時(shí)候练俐,推薦使用 Session 身份認(rèn)證機(jī)制

2. 當(dāng)前端需要跨域請(qǐng)求后端接口的時(shí)候袖迎,不推薦使用 Session 身份認(rèn)證機(jī)制,推薦使用JWT 認(rèn)證機(jī)制

JWT 由三部分組成: Header (頭部)、Payload (有效荷載)燕锥、Signature (簽名)辜贵。三者之間便用英文的“”分隔,格式如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末归形,一起剝皮案震驚了整個(gè)濱河市托慨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌暇榴,老刑警劉巖厚棵,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蔼紧,居然都是意外死亡婆硬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門奸例,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)彬犯,“玉大人,你說(shuō)我怎么就攤上這事查吊⌒城” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵逻卖,是天一觀的道長(zhǎng)宋列。 經(jīng)常有香客問我,道長(zhǎng)箭阶,這世上最難降的妖魔是什么虚茶? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮仇参,結(jié)果婚禮上嘹叫,老公的妹妹穿的比我還像新娘。我一直安慰自己诈乒,他們只是感情好罩扇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怕磨,像睡著了一般喂饥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肠鲫,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天员帮,我揣著相機(jī)與錄音,去河邊找鬼导饲。 笑死捞高,一個(gè)胖子當(dāng)著我的面吹牛氯材,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硝岗,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼氢哮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了型檀?” 一聲冷哼從身側(cè)響起冗尤,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胀溺,沒想到半個(gè)月后裂七,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仓坞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年碍讯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扯躺。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捉兴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出录语,到底是詐尸還是另有隱情倍啥,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布澎埠,位于F島的核電站虽缕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蒲稳。R本人自食惡果不足惜氮趋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望江耀。 院中可真熱鬧剩胁,春花似錦、人聲如沸祥国。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舌稀。三九已至啊犬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壁查,已是汗流浹背觉至。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睡腿,地道東北人语御。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓领斥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沃暗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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