node.js中express中间件body-parser的介绍与用法详解


Posted in Javascript onMay 23, 2017

前言

Node中的核心模块分两类:一类是自带的核心模块,如http、tcp等,第二类是第三方核心模块,express就是与http对应的第三方核心模块,用于处理http请求。express在3.0版本中自带有很多中间件,但是在express 4.0以后,就将除static(静态文件处理)以外的其他中间件分离出来了;在4.0以后需要使用中间件时,就需要单独安装好相应的中间件以后调用,以下3.0与4.0中间件的中间件区别(3.0是内置中间件属性名,4.0是需要安装的中间件名称):

Express 3.0 Name Express 4.0 Name
bodyParser body-parser
compress compression
cookieSession cookie-session
logger morgan
cookieParser cookie-parser
session express-session
favicon static-favicon
response-time response-time
error-handler errorhandler
method-override method-override
timeout connect-timeout
vhost vhost
csrf csurf

body-parser

我是在学习nodejs时候,对着书本的例子时,使用bodyParser这个中间件,在终端运行出问题,报错大概意思也是express4.0中没有bodyParser这个内置中间件了,还给了body-parser的GitHub源代码地址:https://github.com/expressjs/body-parser.

经过看源代码下面的说明知道了body-parser的三种用法:

在讲用法之间,我们需要弄清楚下面四个不同的处理方法:这四个处理方法分别对body的内容采用不同的处理方法;分别是处理json数据、Buffer流数据、文本数据、UTF-8的编码的数据。

bodyParser.json(options)bodyParser.raw(options) bodyParser.text(options) bodyParser.urlencoded(options)

以下是它的三种用法:

1、底层中间件用法:这将拦截和解析所有的请求;也即这种用法是全局的。

var express = require('express')
var bodyParser = require('body-parser')
 
var 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))
})

express的use方法调用body-parser实例;且use方法没有设置路由路径;这样的body-parser实例就会对该app所有的请求进行拦截和解析。

2、特定路由下的中间件用法:这种用法是针对特定路由下的特定请求的,只有请求该路由时,中间件才会拦截和解析该请求;也即这种用法是局部的;也是最常用的一个方式。

var express = require('express')
var bodyParser = require('body-parser')
 
var app = express()
 
// create application/json parser
var jsonParser = bodyParser.json()
 
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })
 
// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
 if (!req.body) return res.sendStatus(400)
 res.send('welcome, ' + req.body.username)
})
 
// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
 if (!req.body) return res.sendStatus(400)
 // create user in req.body
})

express的post(或者get)方法调用body-parser实例;且该方法有设置路由路径;这样的body-parser实例就会对该post(或者get)的请求进行拦截和解析。

3、设置Content-Type 属性;用于修改和设定中间件解析的body类容类型。

// parse various different custom JSON types as JSON
app.use(bodyParser.json({ type: 'application/*+json' });

// parse some custom thing into a Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }));

// parse an HTML body into a string
app.use(bodyParser.text({ type: 'text/html' }));

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用CSS+JS实现的进度条效果效果
Jun 05 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
js中onload与onunload的使用示例
Aug 25 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
Sep 02 Javascript
深入探寻javascript定时器
Jan 02 Javascript
JavaScript实现自动变换表格边框颜色
May 08 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
Aug 31 Javascript
基于jquery实现简单的手风琴特效
Nov 24 Javascript
JQuery实现的按钮倒计时效果
Dec 23 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
详解用webpack把我们的业务模块分开打包的方法
Jul 20 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
微信小程序request出现400的问题解决办法
May 23 #Javascript
Bootstrap响应式表格详解
May 23 #Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 #Javascript
用angular实现多选按钮的全选与反选实例代码
May 23 #Javascript
详解vue嵌套路由-params传递参数
May 23 #Javascript
详解vue嵌套路由-query传递参数
May 23 #Javascript
vue-router 中router-view不能渲染的解决方法
May 23 #Javascript
You might like
php-fpm添加service服务的例子
2018/04/27 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
js实现每日签到功能
2018/11/29 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Python出现segfault错误解决方法
2016/04/16 Python
python3编码问题汇总
2016/09/06 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python字符串的方法与操作大全
2018/01/30 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
销售代表求职自荐信
2013/10/01 职场文书
农民入党思想汇报
2014/01/03 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
JavaScript中reduce()的用法
2022/05/11 Javascript