目錄
- Express
- Application
- Request
- Response
- Router
1. Express ——
生成express 應(yīng)用,Express.js框架內(nèi)置的中間件
主要APi:
- express.json() —— 將常用的幾種請求體轉(zhuǎn)為Json字符串。
- express.static('root',[options]) —— root是最外層的目錄名,中間件會自動根據(jù)提供的路徑來尋找對應(yīng)的執(zhí)行文件,options參數(shù)不是必傳,設(shè)置一些屬性,其原理如下:
express.static('root') /** * 上面代碼的原理是:如果有root路徑,就會執(zhí)行如果沒有會執(zhí)行next()函數(shù) /** if(root){ 執(zhí)行root路徑下的文件 }else{ next() }
- express.row() —— row單詞字面意思為加工,將二進制的請求轉(zhuǎn)換為可讀的類型,比如文件上傳。
- express.Router() —— 生成一個router對象
- express.text() —— 如果上傳的是一個普通文本,則將其轉(zhuǎn)為正常的request Body
- express.urlencoded —— 該api與請求頭有關(guān),如果請求頭是x-www-form-urlencoded,那么此api將請求體中的信息轉(zhuǎn)為JSON 對象。
2. Application ——
主要用于應(yīng)用設(shè)置、模板引擎、中間件、掛載路由等場景中。
主要API
- app.set('name','qinglin') —— 以key value 的形式設(shè)置請求頭中的屬性,一般放在中間件的頭部才會生效
- app.get('name') —— 獲取app.set()中設(shè)置的屬性
- app.post('path',[callback]) —— callBack一般形式為:
(req,res,next,[error])=> {}
app.set() —— 設(shè)置的比較特殊的兩個屬性為:views和view engine:
app.set('views','/path') // 渲染引擎會自動渲染改路徑下的視圖文件
app.set('view engine','ejs/pug/ets') // 設(shè)置渲染引擎,有 ejs pug ets等
- app.put() 、app.delete()、app.patch()都與app.post()的用法一致
- app.render() —— 渲染視圖引擎,app.set()設(shè)置的配置通過試圖引擎解析,然后通過app.render() api 來渲染
- app.use() —— 創(chuàng)建中間件的api, 最通用的api,app.use()也可以設(shè)置一些特殊的屬性,比如:
app.use(express.json()) ap.use('routerPath',router) // 把routerPath文件掛載到router上 ......
- app.listen() // 監(jiān)聽端口號,具體用法如下:
app.listen(3000,callback) // 第一個參數(shù)為監(jiān)聽的端口號,第二個參數(shù)是回調(diào)函數(shù)
3. Request ——
創(chuàng)建請求的應(yīng)用,通常作為app.use()api的回調(diào)函數(shù)的第一個參數(shù),Request對象即普通的http請求對象,通常有參數(shù)、請求頭、請求體等組成,該對象涵蓋了http請求對象的所有屬性和方法
主要APi:
- req.get('Content-Type') —— 獲取請求頭中的信息,括號中的值默認不分大小寫
- req.param('name') —— 獲取請求路由參數(shù),默認獲取的是數(shù)組形式的數(shù)據(jù),也可以是對象形式獲取,比如路徑是/user/:name,那么可以通過req.params.name的方式獲取name 的值
- req.range() —— 請求范圍標(biāo)頭解析器,是指定能請求服務(wù)器資源的最大范圍,返回一個范圍數(shù)組
具體用法如下:
req.range('size',[options]) // size為請求資源的最大范圍,options參數(shù)為具有合并屬性的對象
4. Response ——
創(chuàng)建請求的應(yīng)用,通常作為app.use()api的回調(diào)函數(shù)的第一個參數(shù),Request對象即普通的http請求對象,通常有參數(shù)、請求頭、請求體等組成,該對象涵蓋了http請求對象的所有屬性和方法
主要APi:
- Res.send() —— 將響應(yīng)的數(shù)據(jù)一次性響應(yīng)出來,所以不能和Res.write() APi 一起使用
- Res.write() —— 將響應(yīng)的數(shù)據(jù)以流的形式響應(yīng)出來,所以不能和Res.send() APi 一起使用
- Res.set() —— 設(shè)置響應(yīng)頭中的屬性
- Res.get() —— 獲取響應(yīng)頭中的屬性
- Res.headersSend() —— 獲取響應(yīng)狀態(tài)
- Res.format(obj) —— 一個url返回不同格式的響應(yīng)數(shù)據(jù),用法:
Res.format({ '/user',() => { res.send('/user') }, '/blog',() => { res.send('/blog') }, '/login',() => { res.send('/login') }, default:() => { res.status().send(‘默認值’) } })
- Res.status('200','ok') —— 括號里的值對應(yīng)http 狀態(tài)值,比較特殊的值有304,如果值為304,那么在執(zhí)行中間件時該對象對自動執(zhí)行response.location(‘path’)api.
- Res.redirect([status],path) —— 如果status == 301,則會自動重定向到path,所以使用這個api就不用使用res.status('301',path) 和Res.location(path) 方法了
5. Router ——
Router是一個單獨的實例,用來做路由的,Router可以當(dāng)做一個小型的子應(yīng)用,它是單純的操作路由的,這個路由可以掛載到app上
- Router 對象是由Express.Router()方法來創(chuàng)建
const express = require('express')
const Router = express.Router()
主要APi:
Router 對象的常用方法與application方法類似,常用的有:
- Router.use('outerPath',miawareApp) —— outerPath 是 中間件midwareApp 的最外層的路徑,midwareApp可以是模塊化的中間件,例如:
const express = require('express')
const Router = express.Router()
const midwareApp = require('midwareApp') // midwareApp是一個從其他地方引進來的中間件,其目錄結(jié)構(gòu)為:outerPath/midwareApp,一般情況下outerPath是單獨的一個文件夾,里面可能有多個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的用法類似