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 相关文章推荐
JS 容错处理代码, 屏蔽错误信息
Mar 09 Javascript
用Javascript实现UTF8编码转换成gb2312编码
Dec 22 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
Mar 16 Javascript
node.js中的http.response.write方法使用说明
Dec 14 Javascript
jQuery显示和隐藏 常用的状态判断方法
Jan 29 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
Jan 21 Javascript
微信小程序实现城市列表选择
Jun 05 Javascript
微信小程序实时聊天WebSocket
Jul 05 Javascript
Vue退出登录时清空缓存的实现
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版(2)
2006/10/09 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
Javascript缓存API
2016/06/14 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
2017/09/15 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
python文件名和文件路径操作实例
2017/09/29 Python
Django密码系统实现过程详解
2019/07/19 Python
对Python _取log的几种方式小结
2019/07/25 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
如何验证python安装成功
2020/07/06 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
年度考核自我评价
2014/01/25 职场文书
大学新闻系求职信
2014/06/03 职场文书
护士找工作求职信
2014/07/02 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
导游词300字
2015/02/13 职场文书
2015年组织部工作总结
2015/04/03 职场文书
家长意见书
2015/06/04 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android