目錄
- Express
- Application
- Request
- Response
- Router
1. Express ——
生成express 應(yīng)用摘盆,Express.js框架內(nèi)置的中間件
主要APi:
- express.json() —— 將常用的幾種請(qǐng)求體轉(zhuǎn)為Json字符串柜去。
- express.static('root',[options]) —— root是最外層的目錄名纳猪,中間件會(huì)自動(dòng)根據(jù)提供的路徑來(lái)尋找對(duì)應(yīng)的執(zhí)行文件,options參數(shù)不是必傳宅楞,設(shè)置一些屬性,其原理如下:
express.static('root') /** * 上面代碼的原理是:如果有root路徑,就會(huì)執(zhí)行如果沒(méi)有會(huì)執(zhí)行next()函數(shù) /** if(root){ 執(zhí)行root路徑下的文件 }else{ next() }
- express.row() —— row單詞字面意思為加工仔引,將二進(jìn)制的請(qǐng)求轉(zhuǎn)換為可讀的類型,比如文件上傳褐奥。
- express.Router() —— 生成一個(gè)router對(duì)象
- express.text() —— 如果上傳的是一個(gè)普通文本咖耘,則將其轉(zhuǎn)為正常的request Body
- express.urlencoded —— 該api與請(qǐng)求頭有關(guān),如果請(qǐng)求頭是x-www-form-urlencoded,那么此api將請(qǐng)求體中的信息轉(zhuǎn)為JSON 對(duì)象撬码。
2. Application ——
主要用于應(yīng)用設(shè)置儿倒、模板引擎、中間件呜笑、掛載路由等場(chǎng)景中夫否。
主要API
- app.set('name','qinglin') —— 以key value 的形式設(shè)置請(qǐng)求頭中的屬性,一般放在中間件的頭部才會(huì)生效
- app.get('name') —— 獲取app.set()中設(shè)置的屬性
- app.post('path',[callback]) —— callBack一般形式為:
(req,res,next,[error])=> {}
app.set() —— 設(shè)置的比較特殊的兩個(gè)屬性為:views和view engine:
app.set('views','/path') // 渲染引擎會(huì)自動(dòng)渲染改路徑下的視圖文件
app.set('view engine','ejs/pug/ets') // 設(shè)置渲染引擎叫胁,有 ejs pug ets等
- app.put() 凰慈、app.delete()、app.patch()都與app.post()的用法一致
- app.render() —— 渲染視圖引擎驼鹅,app.set()設(shè)置的配置通過(guò)試圖引擎解析微谓,然后通過(guò)app.render() api 來(lái)渲染
- app.use() —— 創(chuàng)建中間件的api, 最通用的api,app.use()也可以設(shè)置一些特殊的屬性森篷,比如:
app.use(express.json()) ap.use('routerPath',router) // 把routerPath文件掛載到router上 ......
- app.listen() // 監(jiān)聽(tīng)端口號(hào)绰更,具體用法如下:
app.listen(3000,callback) // 第一個(gè)參數(shù)為監(jiān)聽(tīng)的端口號(hào)反番,第二個(gè)參數(shù)是回調(diào)函數(shù)
3. Request ——
創(chuàng)建請(qǐng)求的應(yīng)用瞳浦,通常作為app.use()api的回調(diào)函數(shù)的第一個(gè)參數(shù)捞蚂,Request對(duì)象即普通的http請(qǐng)求對(duì)象显拜,通常有參數(shù)夕玩、請(qǐng)求頭穆壕、請(qǐng)求體等組成考传,該對(duì)象涵蓋了http請(qǐng)求對(duì)象的所有屬性和方法
主要APi:
- req.get('Content-Type') —— 獲取請(qǐng)求頭中的信息肴焊,括號(hào)中的值默認(rèn)不分大小寫
- req.param('name') —— 獲取請(qǐng)求路由參數(shù)前联,默認(rèn)獲取的是數(shù)組形式的數(shù)據(jù),也可以是對(duì)象形式獲取娶眷,比如路徑是/user/:name,那么可以通過(guò)req.params.name的方式獲取name 的值
- req.range() —— 請(qǐng)求范圍標(biāo)頭解析器蛀恩,是指定能請(qǐng)求服務(wù)器資源的最大范圍,返回一個(gè)范圍數(shù)組
具體用法如下:
req.range('size',[options]) // size為請(qǐng)求資源的最大范圍茂浮,options參數(shù)為具有合并屬性的對(duì)象
4. Response ——
創(chuàng)建請(qǐng)求的應(yīng)用双谆,通常作為app.use()api的回調(diào)函數(shù)的第一個(gè)參數(shù),Request對(duì)象即普通的http請(qǐng)求對(duì)象席揽,通常有參數(shù)顽馋、請(qǐng)求頭、請(qǐng)求體等組成幌羞,該對(duì)象涵蓋了http請(qǐng)求對(duì)象的所有屬性和方法
主要APi:
- Res.send() —— 將響應(yīng)的數(shù)據(jù)一次性響應(yīng)出來(lái)寸谜,所以不能和Res.write() APi 一起使用
- Res.write() —— 將響應(yīng)的數(shù)據(jù)以流的形式響應(yīng)出來(lái),所以不能和Res.send() APi 一起使用
- Res.set() —— 設(shè)置響應(yīng)頭中的屬性
- Res.get() —— 獲取響應(yīng)頭中的屬性
- Res.headersSend() —— 獲取響應(yīng)狀態(tài)
- Res.format(obj) —— 一個(gè)url返回不同格式的響應(yīng)數(shù)據(jù)属桦,用法:
Res.format({ '/user',() => { res.send('/user') }, '/blog',() => { res.send('/blog') }, '/login',() => { res.send('/login') }, default:() => { res.status().send(‘默認(rèn)值’) } })
- Res.status('200','ok') —— 括號(hào)里的值對(duì)應(yīng)http 狀態(tài)值熊痴,比較特殊的值有304,如果值為304,那么在執(zhí)行中間件時(shí)該對(duì)象對(duì)自動(dòng)執(zhí)行response.location(‘path’)api.
- Res.redirect([status],path) —— 如果status == 301聂宾,則會(huì)自動(dòng)重定向到path果善,所以使用這個(gè)api就不用使用res.status('301',path) 和Res.location(path) 方法了
5. Router ——
Router是一個(gè)單獨(dú)的實(shí)例,用來(lái)做路由的系谐,Router可以當(dāng)做一個(gè)小型的子應(yīng)用巾陕,它是單純的操作路由的,這個(gè)路由可以掛載到app上
- Router 對(duì)象是由Express.Router()方法來(lái)創(chuàng)建
const express = require('express')
const Router = express.Router()
主要APi:
Router 對(duì)象的常用方法與application方法類似纪他,常用的有:
- Router.use('outerPath',miawareApp) —— outerPath 是 中間件midwareApp 的最外層的路徑鄙煤,midwareApp可以是模塊化的中間件,例如:
const express = require('express')
const Router = express.Router()
const midwareApp = require('midwareApp') // midwareApp是一個(gè)從其他地方引進(jìn)來(lái)的中間件茶袒,其目錄結(jié)構(gòu)為:outerPath/midwareApp,一般情況下outerPath是單獨(dú)的一個(gè)文件夾梯刚,里面可能有多個(gè)midwareApp.js等模塊化的中間件文件
Router.use('outerPath',midwareApp) // outerPath是midwareApp所處的最外層的目錄路徑
/**
* 通用方法為如下:
**/
express.Router.Router.use(path,callback)
const callBack = (req,res,next) => {
req.xxx()
res.xxx()
next()
}
- 其他的api 與application的常用api的用法類似