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 相关文章推荐
Javascript 入门基础学习
Mar 10 Javascript
JS中eval函数的使用示例
Jul 21 Javascript
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
当达到输入长度时表单自动切换焦点
Apr 06 Javascript
jQuery实现手机号码输入提示功能实例
Apr 30 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
Aug 13 Javascript
jQuery实现类似标签风格的导航菜单效果代码
Aug 25 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 Javascript
Ionic3实现图片瀑布流布局
Aug 09 Javascript
详解Vue SPA项目优化小记
Jul 03 Javascript
js实现多张图片每隔一秒切换一张图片
Jul 29 Javascript
vue项目实现减少app.js和vender.js的体积操作
Nov 12 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+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
Python中的类学习笔记
2014/09/23 Python
深入了解Python数据类型之列表
2016/06/24 Python
python去除字符串中的换行符
2017/10/11 Python
Android分包MultiDex策略详解
2017/10/30 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
Django中使用Celery的方法示例
2018/11/29 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
python的slice notation的特殊用法详解
2019/12/27 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
浅析python实现动态规划背包问题
2020/12/31 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
物流管理专业大学生自荐信
2013/10/04 职场文书
仓库主管的岗位职责
2013/12/04 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
高二化学教学反思
2014/01/30 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
少年雷锋观后感
2015/06/10 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB