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设计模式之解释器模式详解
Jun 05 Javascript
js实现简洁大方的二级下拉菜单效果代码
Sep 01 Javascript
JavaScript实现相册弹窗功能(zepto.js)
Jun 21 Javascript
完美解决js传递参数中加号和&号自动改变的方法
Oct 11 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
javascript兼容性(实例讲解)
Aug 15 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
Oct 24 Javascript
JS实现select选中option触发事件操作示例
Jul 13 Javascript
jQuery实现表格隔行换色
Sep 01 jQuery
微信小程序分享海报生成的实现方法
Dec 10 Javascript
js实现图片放大并跟随鼠标移动特效
Jan 18 Javascript
js实现带积分弹球小游戏
Jul 21 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 存储文本换行实现方法
2010/01/05 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Python编程之属性和方法实例详解
2015/05/19 Python
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
Windows下python2.7.8安装图文教程
2016/05/26 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
python中Mako库实例用法
2020/12/31 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
管理部部长岗位职责
2013/12/05 职场文书
公司培训心得体会
2014/01/03 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
求职信模板
2014/05/23 职场文书
出差报告范文
2014/11/06 职场文书
2014年药房工作总结
2014/11/22 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
监考失职检讨书
2015/01/26 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript