成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Body-Parser:一個(gè)格式化請(qǐng)求體數(shù)據(jù)的 Express 三方庫(kù)

開(kāi)發(fā) 前端
本文介紹了 Express 中用于解析請(qǐng)求體數(shù)據(jù)的中間件 body-parser。 其實(shí) Express 在 v4.17.0 中已完整內(nèi)置了 body-parser 的能力,你可以通過(guò) express()? 上的 .json()/.urlencoded()/.text()/.raw() 方法訪問(wèn)到。

body-parser 是 Express 中用于格式化請(qǐng)求體數(shù)據(jù)的一個(gè)三方庫(kù)。

以下是一個(gè) body-parser 的常用使用案例。

const express = require('express')
const bodyParser = require('body-parser')

const app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.body, null, 2))
})

以上代碼設(shè)置的含義是:項(xiàng)目中所有 Content-Type 是 "application/x-www-form-urlencoded" 或 "application/json" 請(qǐng)求數(shù)據(jù)都會(huì)經(jīng)過(guò) body-parser 中間件的處理,并設(shè)置到 req.body 屬性上。

下面就來(lái)詳細(xì)介紹 body-parser 的安裝和使用。

安裝

$ npm install body-parser

使用也比較簡(jiǎn)單。

const bodyParser = require('body-parser')

我們是通過(guò)調(diào)用 bodyParser 對(duì)象的方法來(lái)獲取不同 Content-Type 的數(shù)據(jù)處理能力的。下面就來(lái)介紹。

API

bodyParser 上一共提供了 4 個(gè)方法來(lái)使用,分別對(duì)應(yīng) 4 種不同類型的請(qǐng)求體數(shù)據(jù)。

  1. bodyParser.json([options])
  2. bodyParser.urlencoded([options])
  3. bodyParser.text([options])
  4. bodyParser.raw([options])

其中前 2 種是我們最常使用的。接下來(lái)分別介紹。

bodyParser.json([options])

返回能解析 json 數(shù)據(jù)的中間件,默認(rèn)匹配 Content-Type 值為 "application/json"(可以通過(guò) options.type 進(jìn)行控制)。接受任何 Unicode  編碼的請(qǐng)求體數(shù)據(jù),而且還支持 gzip 和 deflate 壓縮算法的自動(dòng)解壓。

解析好的請(qǐng)求體數(shù)據(jù)會(huì)放在 req.body 屬性上,無(wú)請(qǐng)求體數(shù)據(jù)則返回一個(gè)空對(duì)象({})。

Options 選項(xiàng)

這是一個(gè)可選參數(shù),不傳入則使用默認(rèn)選項(xiàng)。其他 3 個(gè)方法與此類似,在此講 1 遍后,如果沒(méi)有特殊情況,后面就不再贅述了。

  • type:默認(rèn)值是 "application/json",表示這個(gè)中間件默認(rèn)匹配的 Content-Type 是 "application/json",這個(gè)字段除了接收字符串,還支持接收對(duì)象和數(shù)組。你也可以自定義,比如設(shè)置成 "*/json"(內(nèi)部是使用 type-is[1] 做匹配的)
  • inflate:是否開(kāi)啟自動(dòng)解壓請(qǐng)求體數(shù)據(jù)的能力,默認(rèn)為 true(目前支持 支持 gzip 和 deflate 2 中壓縮算法)
  • limit:控制最大請(qǐng)求正文大小,否則報(bào)錯(cuò)。默認(rèn)值是 '100kb'(內(nèi)部傳遞給 bytes[2] 庫(kù)將其解析成字節(jié)數(shù)進(jìn)行判斷處理)
  • reviver:body-parser 內(nèi)部默認(rèn)使用 JSON.parse() 方法將字符串格式化成對(duì)象設(shè)置到 req.body 上。這個(gè)參數(shù)就是傳遞給 JSON.parse() 方法的第 2 個(gè)參數(shù),用來(lái)自定義解析行為。搞不清楚的同學(xué)可以看一下 MDN 上 JSON.parse() 的使用文檔[3]
  • strict:默認(rèn)為 true,用來(lái)控制內(nèi)部 JSON.parse() 所接收的字符串是否只能是對(duì)象和數(shù)組。設(shè)置成 false 時(shí)表示可以接受任意類型的字符串?dāng)?shù)據(jù)

bodyParser.urlencoded([options])

默認(rèn)處理 Content-Type 值為 "application/x-www-form-urlencoded" 的請(qǐng)求體數(shù)據(jù)。

.urlencoded() 中間件還提供了一個(gè)布爾參數(shù) urlencoded,用來(lái)決定使用哪一個(gè)查詢解析庫(kù)來(lái)處理請(qǐng)求參數(shù)。

  • urlencoded為 false 時(shí),內(nèi)部使用 querystring 庫(kù)解析
  • urlencoded為 true 時(shí),內(nèi)部使用 qs 庫(kù)解析

qs 與 querystring 的區(qū)別在于:querystring 只能解析簡(jiǎn)單 key-value 對(duì),qs 則支持嵌套對(duì)象的 key-value 對(duì)的解析,后者功能會(huì)更加強(qiáng)大。

Options 選項(xiàng)

  • urlencoded:以上已介紹過(guò)。默認(rèn)為 true(即使用 qs 解析參數(shù)),不過(guò)已被棄。官方推薦顯式傳入一個(gè)值,這就需要你了解 qs 和 querystring 之間的區(qū)別
  • parameterLimit:控制 URL 編碼數(shù)據(jù)中允許的最大參數(shù)數(shù)量,默認(rèn)是 1000。多于這個(gè)值,會(huì)向客戶端返回 413 響應(yīng)碼

bodyParser.text([options])

默認(rèn)處理 Content-Type 值為 "text/plain" 的請(qǐng)求體數(shù)據(jù)。

Options 選項(xiàng)

  • defaultCharset:如果請(qǐng)求頭中的 Content-Type 頭中沒(méi)有指定字符集,則使用這個(gè)字段所指定的文本內(nèi)容的默認(rèn)字符集。默認(rèn)為 "utf-8"。

bodyParser.raw([options])

默認(rèn)處理 Content-Type 值為 "application/octet-stream" 的請(qǐng)求體數(shù)據(jù)。

不支持 multipart/form-data

body-parser 并不支持處理 Content-Type 是 "multipart/form-data" 的請(qǐng)求體數(shù)據(jù)。如果你有這方面的需求,可以參照下面的庫(kù)進(jìn)行選擇。

  • busboy[4] 和 connect-busboy[5]
  • multiparty[6] 和 connect-multiparty[7]
  • formidable[8]
  • multer[9]

express 已內(nèi)置 body-parser

express 從 v4.17.0 開(kāi)始[10],已全面內(nèi)置了 body-parser 功能,你直接可以通過(guò) express().json() / express().raw()/express().text()/ express().urlencoded() 4 個(gè) API。

在內(nèi)部,這 4 方法其實(shí)是 body-parser 借著 express 暴露出來(lái)[11]的。也就是說(shuō)項(xiàng)目中你無(wú)需安裝 body-parser 依賴了。

const bodyParser = require('body-parser')

/**
 * Expose middleware
 */

exports.json = bodyParser.json
exports.query = require('./middleware/query');
exports.raw = bodyParser.raw
exports.text = bodyParser.text
exports.urlencoded = bodyParser.urlencoded

總結(jié)

本文介紹了 Express 中用于解析請(qǐng)求體數(shù)據(jù)的中間件 body-parser。 其實(shí) Express 在 v4.17.0 中已完整內(nèi)置了 body-parser 的能力,你可以通過(guò) express() 上的 .json()/.urlencoded()/.text()/.raw() 方法訪問(wèn)到。

就介紹到這里了,希望本文對(duì)你有所幫助,感謝閱讀,再見(jiàn)。

參考資料

[1]type-is: https://www.npmjs.org/package/type-is#readme

[2]bytes: https://www.npmjs.com/package/bytes

[3]MDN 上 JSON.parse() 的使用文檔: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter

[4]busboy: https://www.npmjs.org/package/busboy#readme

[5]connect-busboy: https://www.npmjs.org/package/connect-busboy#readme

[6]multiparty: https://www.npmjs.org/package/multiparty#readme

[7]connect-multiparty: https://www.npmjs.org/package/connect-multiparty#readme

[8]formidable: https://www.npmjs.org/package/formidable#readme

[9]multer: https://www.npmjs.org/package/multer#readme

[10]從 v4.17.0 開(kāi)始: https://expressjs.com/en/4x/api.html#express.json

[11]body-parser 借著 express 暴露出來(lái): https://github.com/expressjs/express/blob/4.18.2/lib/express.js#L78

責(zé)任編輯:武曉燕 來(lái)源: 寫(xiě)代碼的寶哥
相關(guān)推薦

2013-04-07 15:13:21

CocoaPods第三方庫(kù)管理利器

2023-12-06 08:07:13

拖拽庫(kù)可視化

2010-09-10 15:32:53

SQL函數(shù)日期格式化

2023-12-12 09:58:08

2023-02-07 15:43:13

三方庫(kù)適配鴻蒙

2013-01-15 13:50:22

iOS開(kāi)發(fā)開(kāi)源庫(kù)

2022-11-21 16:15:41

ArkUI鴻蒙

2023-03-22 09:09:21

鴻蒙Speexdsp

2019-07-30 11:35:54

AndroidRetrofit庫(kù)

2017-11-01 06:40:33

2022-04-17 18:45:57

YUM開(kāi)源包管理工具

2025-06-16 08:05:00

Python庫(kù)編程

2021-10-11 06:38:52

Go開(kāi)源庫(kù)語(yǔ)言

2010-04-26 09:41:48

Oracle sqlp

2009-08-03 14:25:59

C#日期格式化

2010-06-17 13:24:38

SQL Server教

2014-07-22 10:56:45

Android Stu第三方類庫(kù)

2016-10-21 14:09:10

2022-11-16 14:05:06

Tesseract應(yīng)用調(diào)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美一区免费 | 综合色婷婷 | 亚洲一区二区精品视频在线观看 | 欧美久久久久久久 | 亚洲一区av | 国产欧美一区二区三区在线播放 | 伊人免费在线观看 | 天堂久久一区 | 国产成人免费在线 | 日韩三区在线观看 | 天天操一操 | 久久久久久精 | 国产成人免费 | 日本一区二区三区四区 | 毛片在线视频 | 美女毛片免费看 | 国产农村妇女毛片精品久久麻豆 | 91传媒在线观看 | 国产精品久久久久久婷婷天堂 | 亚洲网站在线 | 久久国产免费看 | 成人免费视频观看 | 国产免费一区 | 欧美a级成人淫片免费看 | 精品中文字幕一区二区 | 亚洲欧洲精品一区 | 艹逼网| 国产精品久久久久一区二区三区 | 久久婷婷国产 | 91视频网址 | 亚洲日本成人 | 欧美大片久久久 | 国产精品99久久久久久久vr | 嫩草懂你的影院入口 | 久久人体 | 久久99久久久久 | 凹凸日日摸日日碰夜夜 | 在线观看中文字幕 | 久久99精品久久久久子伦 | www.国产.com | 欧美在线观看网站 |