当前位置:首页 > 科技  > 软件

Body-Parser:一个格式化请求体数据的 Express 三方库

来源: 责编: 时间:2024-02-29 14:43:45 244观看
导读body-parser 是 Express 中用于格式化请求体数据的一个三方库。以下是一个 body-parser 的常用使用案例。const express = require('express')const bodyParser = require('body-parser')const app = express()// par

body-parser 是 Express 中用于格式化请求体数据的一个三方库。RA828资讯网——每日最新资讯28at.com

以下是一个 body-parser 的常用使用案例。RA828资讯网——每日最新资讯28at.com

const express = require('express')const bodyParser = require('body-parser')const app = express()// parse application/x-www-form-urlencodedapp.use(bodyParser.urlencoded({ extended: false }))// parse application/jsonapp.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))})

以上代码设置的含义是:项目中所有 Content-Type 是 "application/x-www-form-urlencoded" 或 "application/json" 请求数据都会经过 body-parser 中间件的处理,并设置到 req.body 属性上。RA828资讯网——每日最新资讯28at.com

下面就来详细介绍 body-parser 的安装和使用。RA828资讯网——每日最新资讯28at.com

安装

$ npm install body-parser

使用也比较简单。RA828资讯网——每日最新资讯28at.com

const bodyParser = require('body-parser')

我们是通过调用 bodyParser 对象的方法来获取不同 Content-Type 的数据处理能力的。下面就来介绍。RA828资讯网——每日最新资讯28at.com

API

bodyParser 上一共提供了 4 个方法来使用,分别对应 4 种不同类型的请求体数据。RA828资讯网——每日最新资讯28at.com

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

其中前 2 种是我们最常使用的。接下来分别介绍。RA828资讯网——每日最新资讯28at.com

bodyParser.json([options])

返回能解析 json 数据的中间件,默认匹配 Content-Type 值为 "application/json"(可以通过 options.type 进行控制)。接受任何 Unicode  编码的请求体数据,而且还支持 gzip 和 deflate 压缩算法的自动解压。RA828资讯网——每日最新资讯28at.com

解析好的请求体数据会放在 req.body 属性上,无请求体数据则返回一个空对象({})。RA828资讯网——每日最新资讯28at.com

Options 选项

这是一个可选参数,不传入则使用默认选项。其他 3 个方法与此类似,在此讲 1 遍后,如果没有特殊情况,后面就不再赘述了。RA828资讯网——每日最新资讯28at.com

  • type:默认值是 "application/json",表示这个中间件默认匹配的 Content-Type 是 "application/json",这个字段除了接收字符串,还支持接收对象和数组。你也可以自定义,比如设置成 "*/json"(内部是使用 type-is[1] 做匹配的)
  • inflate:是否开启自动解压请求体数据的能力,默认为 true(目前支持 支持 gzip 和 deflate 2 中压缩算法)
  • limit:控制最大请求正文大小,否则报错。默认值是 '100kb'(内部传递给 bytes[2] 库将其解析成字节数进行判断处理)
  • reviver:body-parser 内部默认使用 JSON.parse() 方法将字符串格式化成对象设置到 req.body 上。这个参数就是传递给 JSON.parse() 方法的第 2 个参数,用来自定义解析行为。搞不清楚的同学可以看一下 MDN 上 JSON.parse() 的使用文档[3]
  • strict:默认为 true,用来控制内部 JSON.parse() 所接收的字符串是否只能是对象和数组。设置成 false 时表示可以接受任意类型的字符串数据

bodyParser.urlencoded([options])

默认处理 Content-Type 值为 "application/x-www-form-urlencoded" 的请求体数据。RA828资讯网——每日最新资讯28at.com

.urlencoded() 中间件还提供了一个布尔参数 urlencoded,用来决定使用哪一个查询解析库来处理请求参数。RA828资讯网——每日最新资讯28at.com

  • urlencoded为 false 时,内部使用 querystring 库解析
  • urlencoded为 true 时,内部使用 qs 库解析

qs 与 querystring 的区别在于:querystring 只能解析简单 key-value 对,qs 则支持嵌套对象的 key-value 对的解析,后者功能会更加强大。RA828资讯网——每日最新资讯28at.com

Options 选项

  • urlencoded:以上已介绍过。默认为 true(即使用 qs 解析参数),不过已被弃。官方推荐显式传入一个值,这就需要你了解 qs 和 querystring 之间的区别
  • parameterLimit:控制 URL 编码数据中允许的最大参数数量,默认是 1000。多于这个值,会向客户端返回 413 响应码

bodyParser.text([options])

默认处理 Content-Type 值为 "text/plain" 的请求体数据。RA828资讯网——每日最新资讯28at.com

Options 选项

  • defaultCharset:如果请求头中的 Content-Type 头中没有指定字符集,则使用这个字段所指定的文本内容的默认字符集。默认为 "utf-8"。

bodyParser.raw([options])

默认处理 Content-Type 值为 "application/octet-stream" 的请求体数据。RA828资讯网——每日最新资讯28at.com

不支持 multipart/form-data

body-parser 并不支持处理 Content-Type 是 "multipart/form-data" 的请求体数据。如果你有这方面的需求,可以参照下面的库进行选择。RA828资讯网——每日最新资讯28at.com

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

express 已内置 body-parser

express 从 v4.17.0 开始[10],已全面内置了 body-parser 功能,你直接可以通过 express().json() / express().raw()/express().text()/ express().urlencoded() 4 个 API。RA828资讯网——每日最新资讯28at.com

在内部,这 4 方法其实是 body-parser 借着 express 暴露出来[11]的。也就是说项目中你无需安装 body-parser 依赖了。RA828资讯网——每日最新资讯28at.com

const bodyParser = require('body-parser')/** * Expose middleware */exports.json = bodyParser.jsonexports.query = require('./middleware/query');exports.raw = bodyParser.rawexports.text = bodyParser.textexports.urlencoded = bodyParser.urlencoded

总结

本文介绍了 Express 中用于解析请求体数据的中间件 body-parser。 其实 Express 在 v4.17.0 中已完整内置了 body-parser 的能力,你可以通过 express() 上的 .json()/.urlencoded()/.text()/.raw() 方法访问到。RA828资讯网——每日最新资讯28at.com

就介绍到这里了,希望本文对你有所帮助,感谢阅读,再见。RA828资讯网——每日最新资讯28at.com

参考资料

[1]type-is: https://www.npmjs.org/package/type-is#readmeRA828资讯网——每日最新资讯28at.com

[2]bytes: https://www.npmjs.com/package/bytesRA828资讯网——每日最新资讯28at.com

[3]MDN 上 JSON.parse() 的使用文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameterRA828资讯网——每日最新资讯28at.com

[4]busboy: https://www.npmjs.org/package/busboy#readmeRA828资讯网——每日最新资讯28at.com

[5]connect-busboy: https://www.npmjs.org/package/connect-busboy#readmeRA828资讯网——每日最新资讯28at.com

[6]multiparty: https://www.npmjs.org/package/multiparty#readmeRA828资讯网——每日最新资讯28at.com

[7]connect-multiparty: https://www.npmjs.org/package/connect-multiparty#readmeRA828资讯网——每日最新资讯28at.com

[8]formidable: https://www.npmjs.org/package/formidable#readmeRA828资讯网——每日最新资讯28at.com

[9]multer: https://www.npmjs.org/package/multer#readmeRA828资讯网——每日最新资讯28at.com

[10]从 v4.17.0 开始: https://expressjs.com/en/4x/api.html#express.jsonRA828资讯网——每日最新资讯28at.com

[11]body-parser 借着 express 暴露出来: https://github.com/expressjs/express/blob/4.18.2/lib/express.js#L78RA828资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-75357-0.htmlBody-Parser:一个格式化请求体数据的 Express 三方库

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 详解渗透测试和漏洞扫描的开源自动化解决方案

下一篇: 如何在Rust中操作JSON,你学会了吗?

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
Top