Express中间件body-parser
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相关推荐
- Node.js—Express、Express 路由 、Express 中间件、使用 Express 写接口
目标: 能够使用 express.static() 快速托管静态资源 能够使用 express 路由精简项目结构 能够使用常见的 express 中间件 能够使用 express 创建API接口 能够 ...
- Express中间件工作原理介绍
Express中间件工作原理介绍 中间件是Express框架学习中最难的部分,同时也是最为核心的技术,我们的学习路线如下 1.什么是中间件 2.Express中间件的本质及工作原理 3.自定义解析po ...
- 二、express中间件
一.中间件引入 实现加入日志模块功能: 1. 我们能想到的方案: 将日志输出代码封装到函数中,然后需要日志输出的地方调用这个函数即可. app.js文件: const express = requir ...
- koa2 mysql 中间件_Koa2 和 Express 中间件对比
koa2 中间件 koa2的中间件是通过 async await 实现的,中间件执行顺序是"洋葱圈"模型. 中间件之间通过next函数联系,当一个中间件调用 next() 后,会将 ...
- Express 中间件 body-parser 原理分析
原文出自:https://www.pandashen.com 前言 Express 是基于 NodeJS 平台的 Web 框架,应用广泛,在 Express 社区中有着大量的开发者通过 Express ...
- node.js学习笔记3 express基本使用、托管静态资源、express中间件
内容 1. 什么是express 1.1 http模块和express的关系 2. express能做什么 3. express的基本使用 3.1 安装 3.2 创建最基本的web服务器 3.3 监听 ...
- 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 ...
- Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL
文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...
- Express 中间件及路由
通过示例介绍中间件 打印请求日志(输出每个请求的 请求方法 + 请求路径 + 请求时间) app.get('/', (req, res) => {res.send('get /') })app. ...
- 吐槽express 中间件multer
工作不是那么忙,想学一下Express+multer弄一个最简单的文件上传,然后开始npm install,然后开始对着multer官方文档一顿操作. 前台页面最简单的: <!DOCTYPE h ...
最新文章
- 【Linux】类Unix 操作系统进程监控控制工具 Supervisor
- jquery 临时存值
- js把html转换成图片格式,纯JS实现将DIV中的内容转化为PNG图片
- SAP UI5 control id generation by jQuery
- TortoiseGit + GitHub 快速上手指南
- mac终端操作文件或文件夹(持续更新)
- Python GUI篇——关不掉的小窗口
- MS DOS 命令大全
- 【不能执行已释放的 sript 代码】 已解决 命名【疾风】
- sklearn学习笔记(3)svm多分类
- Neuralog.v2013.06 1CD (测井曲线智能矢量化软件)
- 随机生成一注双色球号码 - - (要求同色号码不重复 )
- npm安装vant(有赞UI)框架 - cmd篇
- android 图片尺寸修改工具,图片尺寸修改器手机版下载_图片尺寸修改器安卓下载v 6.3...
- java中dao和dao.impl_java 包 dao 和 dao.impl 问题
- 教你制作QQ空间超高连通率背景音乐链接。
- 远行星号java 出错_远行星号跳出问题[已解决]
- 使用matplotlib.plot绘制随机点位图
- 开关量无线传输-1主4从
- 【NLP】NLP标注工具Brat的简单使用
热门文章
- Android11.0 默认开启WLAN热点设置默认热点名称和密码
- 黑盒测试c语言用例,【测试二】黑盒测试的测试用例设计方法
- 【STM32学习】(28)STM32实现光照度采集(标准库和HAL库实现)
- 【公益译文】网络威胁信息共享指南
- gprs信息上传服务器,车载GPS GPRS数据上传 源码带注释
- html制作钢铁侠心脏,钢铁侠的“心脏”并不是特效,得知如何制成的,网友:难以置信...
- 基于ETest的航电系统通用测试平台
- html鼠标经过状态,30种炫酷html5鼠标滑过图片标题显示效果
- LaTeX中的参考文献——作者年代引用
- 动力节点『lol版』Java学习路线图(四)Javaweb阶段