BodyParser简介

在http请求种,POST、PUT、PATCH三种请求方法中包含着请求体,也就是所谓的request-body,在Nodejs原生的http模块中,请求体是要基于流的方式来接受和解析。

body-parser是一个HTTP请求体解析的中间件,使用这个模块可以解析JSON、Raw、文本、URL-encoded格式的请求体。

Node原生的http模块中,是将用户请求数据封装到了用于请求的对象req中,这个对象是一个IncomingMessage,该对象同时也是一个可读流对象。在原生Http服务器,或不依赖第三方解析模块时,可以用下面的方法请求并且解析请求体:

    const http = require('http');http.createServer(function(req, res){if(req.method.toLowerCase() === 'post'){let body = '';//此步骤为接收数据req.on('data', function(chunk){body += chunk;});//开始解析req.on('end', function(){if(req.headers['content-type'].indexOf('application/json')!==-1){JSON.parse(body);}else if(req.headers['content-type'].indexOf('application/octet-stream')!==-1){//Rwa格式请求体解析}else if(req.headers['content-type'].indexOf('text/plain')!==-1){//text文本格式请求体解析}else if(req.headers['content-type'].indexOf('application/x-www-form-urlencoded')!==-1){//url-encoded格式请求体解析}else{//其他格式解析}})}else{res.end('其他方式提交')}}).listen(3000)

Express框架默认使用body-parser作为请求体解析中间件,在创建了Express项目之后,可以在app.js文件中找到:

/* 引入依赖项 */
var express = require('express');
// ……
var bodyParser = require('body-parser');var routes = require('./routes/index');
var users = require('./routes/users');var app = express();// ……// 解析 application/json
app.use(bodyParser.json());
// 解析 application/x-www-form-urlencoded
app.use(bodyParser.urlencoded());

这样就可以在项目的application级别,引入了body-parser模块处理请求体。在上述代码中,模块会处理application/x-www-form-urlencoded、application/json两种格式的请求体。经过这个中间件后,就可以在所有路由处理器的req.body中访问请求参数。

在实际项目中,不同路径可能要求用户使用不同的内容类型,body-parser还支持为单个express路由添加请求体解析,比如:

var express = require('express');
var bodyParser = require('body-parser');var app = new express();//创建application/json解析
var jsonParser = bodyParser.json();//创建application/x-www-form-urlencoded
var urlencodedParser = bodyParser.urlencoded({extended: false});//POST /login 中获取URL编码的请求体
app.post('/login', urlencodedParser, function(req, res){if(!req.body) return res.sendStatus(400);res.send('welcome, ' + req.body.username);
})//POST /api/users 获取JSON编码的请求体
app.post('/api/users', jsonParser, function(req,res){if(!req.body) return res.sendStatus(400);//create user in req.body
})

指定请求类型

body-parser还支持为某一种或者某一类内容类型的请求体指定解析方式,指定时可以通过在解析方法中添加type参数修改指定Content-Type的解析方式。

比如,对text/plain内容类型使用JSON解析:

app.use(bodyParser.json({type: 'text/plain'}))

这一选项更多是用在非标准请求头中的解析:

// 解析自定义的 JSON
app.use(bodyParser.json({ type: 'application/*+json' }))// 解析自定义的 Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))// 将 HTML 请求体做为字符串处理
app.use(bodyParser.text({ type: 'text/html' }))

body-parser模块的API

当请求体解析之后,解析值会被放到req.body属性中,当内容为空时候,为一个空对象{}。

  • ---bodyParser.json()--解析JSON格式
  • ---bodyParser.raw()--解析二进制格式
  • ---bodyParser.text()--解析文本格式
  • ---bodyParser.urlencoded()--解析文本格式

Express中间件body-parser相关推荐

  1. Node.js—Express、Express 路由 、Express 中间件、使用 Express 写接口

    目标: 能够使用 express.static() 快速托管静态资源 能够使用 express 路由精简项目结构 能够使用常见的 express 中间件 能够使用 express 创建API接口 能够 ...

  2. Express中间件工作原理介绍

    Express中间件工作原理介绍 中间件是Express框架学习中最难的部分,同时也是最为核心的技术,我们的学习路线如下 1.什么是中间件 2.Express中间件的本质及工作原理 3.自定义解析po ...

  3. 二、express中间件

    一.中间件引入 实现加入日志模块功能: 1. 我们能想到的方案: 将日志输出代码封装到函数中,然后需要日志输出的地方调用这个函数即可. app.js文件: const express = requir ...

  4. koa2 mysql 中间件_Koa2 和 Express 中间件对比

    koa2 中间件 koa2的中间件是通过 async await 实现的,中间件执行顺序是"洋葱圈"模型. 中间件之间通过next函数联系,当一个中间件调用 next() 后,会将 ...

  5. Express 中间件 body-parser 原理分析

    原文出自:https://www.pandashen.com 前言 Express 是基于 NodeJS 平台的 Web 框架,应用广泛,在 Express 社区中有着大量的开发者通过 Express ...

  6. node.js学习笔记3 express基本使用、托管静态资源、express中间件

    内容 1. 什么是express 1.1 http模块和express的关系 2. express能做什么 3. express的基本使用 3.1 安装 3.2 创建最基本的web服务器 3.3 监听 ...

  7. Node 学习 | Day03 express (初识Express、Express 路由、Express 中间件、使用 Express 写接口)

    Express 初识Express 1.1 Express 简介 1.1.1 什么是 express 1.1.2 进一步理解 Express 1.1.3 Express可以做什么 1.2 Expres ...

  8. Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL

    文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...

  9. Express 中间件及路由

    通过示例介绍中间件 打印请求日志(输出每个请求的 请求方法 + 请求路径 + 请求时间) app.get('/', (req, res) => {res.send('get /') })app. ...

  10. 吐槽express 中间件multer

    工作不是那么忙,想学一下Express+multer弄一个最简单的文件上传,然后开始npm install,然后开始对着multer官方文档一顿操作. 前台页面最简单的: <!DOCTYPE h ...

最新文章

  1. 【Linux】类Unix 操作系统进程监控控制工具 Supervisor
  2. jquery 临时存值
  3. js把html转换成图片格式,纯JS实现将DIV中的内容转化为PNG图片
  4. SAP UI5 control id generation by jQuery
  5. TortoiseGit + GitHub 快速上手指南
  6. mac终端操作文件或文件夹(持续更新)
  7. Python GUI篇——关不掉的小窗口
  8. MS DOS 命令大全
  9. 【不能执行已释放的 sript 代码】 已解决 命名【疾风】
  10. sklearn学习笔记(3)svm多分类
  11. Neuralog.v2013.06 1CD (测井曲线智能矢量化软件)
  12. 随机生成一注双色球号码 - - (要求同色号码不重复 )
  13. npm安装vant(有赞UI)框架 - cmd篇
  14. android 图片尺寸修改工具,图片尺寸修改器手机版下载_图片尺寸修改器安卓下载v 6.3...
  15. java中dao和dao.impl_java 包 dao 和 dao.impl 问题
  16. 教你制作QQ空间超高连通率背景音乐链接。
  17. 远行星号java 出错_远行星号跳出问题[已解决]
  18. 使用matplotlib.plot绘制随机点位图
  19. 开关量无线传输-1主4从
  20. 【NLP】NLP标注工具Brat的简单使用

热门文章

  1. Android11.0 默认开启WLAN热点设置默认热点名称和密码
  2. 黑盒测试c语言用例,【测试二】黑盒测试的测试用例设计方法
  3. 【STM32学习】(28)STM32实现光照度采集(标准库和HAL库实现)
  4. 【公益译文】网络威胁信息共享指南
  5. gprs信息上传服务器,车载GPS GPRS数据上传 源码带注释
  6. html制作钢铁侠心脏,钢铁侠的“心脏”并不是特效,得知如何制成的,网友:难以置信...
  7. 基于ETest的航电系统通用测试平台
  8. html鼠标经过状态,30种炫酷html5鼠标滑过图片标题显示效果
  9. LaTeX中的参考文献——作者年代引用
  10. 动力节点『lol版』Java学习路线图(四)Javaweb阶段