Express中间件之body-parser

中间件body-parser的作用是解析POST请求的请求体。然后我们可以通过req.body,获取到请求参数。
在express4.0之前bodyParser没有从express中剥离开可以通过express.bodyParser引入,但是4.0以后需要单独安装然后通过require(‘body-parser’)引入。
body-parser中提供了四种处理数据的方法:
bodyParser.json(options)//处理json数据,对应的content-type:application/json
bodyParser.raw(options)//处理buffer,数据流对应的content-type:application/vnd.custom-type
bodyParser.text(options)//处理text,文本对应的content-type:text/html
bodyParser.urlencoded(options)//处理UTF-8编码的内容对应的content-type:application/x-www-form-urlencoded
我们常常会看见bodyParser.urlencoded({extended:false})这样的写法,我查阅了一下,其实他的作用就是告诉bodyParser到底是使用querystring
还是QS来处理字符串,
querystring我们在处理GET请求的时候经常用它来格式化请求路径中带来的参数:

var http = require("http");
var querystring = require('querystring');
    http.createServer(function(req,res){
       var query = querystring.parse(req.query);
    })

QS我没用过,他就是一个加强版的querystring,他提供了更多的功能并优化了一些安全性,一般使用querystring就行了,所以一般我们使用{extended:false{}

常见的四种Content-Type:
application/json:json
application/x-www-form-urlencoded:表单
application/form-data:文件
text/html:文本
body-parser常见的使用场景有两种:
第一种,全局使用,
顾名思义就是在全局中有效,对请求进行全局拦截,所有的请求都记性body处理。

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
    app.use(bodyParser.urlencoded({
             extended:false,
    }));
    app.use(bodyParser.json());
    app.use("/",function(req,res){
    });
    ...

这里我们use了多种方法,但是这些方法只有一个会匹配成功,就像路由匹配一样,他会去判断header中的content-type是那种类型,然后去匹配对应的处理方法,所以最终执行的方法只有一个,生成一个对应的body。通过阅读源码会发现

req.on("data",function(chunk){

});
req.on("end",function(chunk){

});

他是通过读取req的stream流获取的数据,如果一旦匹配成功,req的流以及被截取,所以其他的也读不到了。

第二种方法是特定路由下使用

var express = require('express')
var bodyParser = require('body-parser')
var app = express()
var jsonParser = bodyParser.json()

var urlencodedParser = bodyParser.urlencoded({ extended: false })
app.post('/login', urlencodedParser, function (req, res) {
  if (!req.body) return res.sendStatus(400)
  res.send('welcome, ' + req.body.username)
}) 

app.post('/api/users', jsonParser, function (req, res) {
  if (!req.body) {
     return res.sendStatus(400)
  }

这种方法只有在匹配到具体的路由后才会去处理body中的数据。

在此声明,我善用’通假字’,勿吐槽!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
body-parser 是一个 Node.js 中间件,用于处理 HTTP 请求体中的数据。它可以解析 JSON、Raw、文本、URL-encoded 格式的请求体,并且提供了多种选项来控制解析方式。 安装: 使用 npm 安装: ``` npm install body-parser ``` 使用: 在 Express 应用中使用 body-parser: ```javascript const express = require('express') const bodyParser = require('body-parser') const app = express() // 解析 application/json app.use(bodyParser.json()) // 解析 application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // 解析 text/plain app.use(bodyParser.text()) // 解析 raw app.use(bodyParser.raw()) // 处理业务逻辑 app.post('/api', (req, res) => { console.log(req.body) res.send('success') }) app.listen(3000, () => { console.log('Server started on port 3000') }) ``` 在上面的示例中,我们通过 `app.use` 方法来注册 body-parser 中间件。然后,我们可以使用 `req.body` 来访问请求体中的数据。 body-parser 支持多种解析方式,通过传递不同的参数来控制解析方式。例如,`bodyParser.urlencoded({ extended: false })` 可以控制解析 URL-encoded 格式的请求体时,是否使用 `querystring` 库来解析数据。如果将 `extended` 参数设置为 `true`,则使用 `qs` 库来解析数据。 除了上述示例中的常见解析方式,body-parser 还支持自定义解析函数,可通过 `bodyParser.raw(options)` 或 `bodyParser.text(options)` 方法来注册。 更多详细信息,请参阅官方文档:https://github.com/expressjs/body-parser#readme

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值