文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 01:05

关注

以下是一个 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))
})

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

下面就来详细介绍 body-parser 的安装和使用。

安装

$ npm install body-parser

使用也比较简单。

const bodyParser = require('body-parser')

我们是通过调用 bodyParser 对象的方法来获取不同 Content-Type 的数据处理能力的。下面就来介绍。

API

bodyParser 上一共提供了 4 个方法来使用,分别对应 4 种不同类型的请求体数据。

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

其中前 2 种是我们最常使用的。接下来分别介绍。

bodyParser.json([options])

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

解析好的请求体数据会放在 req.body 属性上,无请求体数据则返回一个空对象({})。

Options 选项

这是一个可选参数,不传入则使用默认选项。其他 3 个方法与此类似,在此讲 1 遍后,如果没有特殊情况,后面就不再赘述了。

bodyParser.urlencoded([options])

默认处理 Content-Type 值为 "application/x-www-form-urlencoded" 的请求体数据。

.urlencoded() 中间件还提供了一个布尔参数 urlencoded,用来决定使用哪一个查询解析库来处理请求参数。

qs 与 querystring 的区别在于:querystring 只能解析简单 key-value 对,qs 则支持嵌套对象的 key-value 对的解析,后者功能会更加强大。

Options 选项

bodyParser.text([options])

默认处理 Content-Type 值为 "text/plain" 的请求体数据。

Options 选项

bodyParser.raw([options])

默认处理 Content-Type 值为 "application/octet-stream" 的请求体数据。

不支持 multipart/form-data

body-parser 并不支持处理 Content-Type 是 "multipart/form-data" 的请求体数据。如果你有这方面的需求,可以参照下面的库进行选择。

express 已内置 body-parser

express 从 v4.17.0 开始[10],已全面内置了 body-parser 功能,你直接可以通过 express().json() / express().raw()/express().text()/ express().urlencoded() 4 个 API。

在内部,这 4 方法其实是 body-parser 借着 express 暴露出来[11]的。也就是说项目中你无需安装 body-parser 依赖了。

const bodyParser = require('body-parser')



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

总结

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

就介绍到这里了,希望本文对你有所帮助,感谢阅读,再见。

参考资料

[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 开始: https://expressjs.com/en/4x/api.html#express.json

[11]body-parser 借着 express 暴露出来: https://github.com/expressjs/express/blob/4.18.2/lib/express.js#L78

来源:写代码的宝哥内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯