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 相关文章推荐
用YUI做了个标签浏览效果
Feb 20 Javascript
JavaScript学习笔记(一) js基本语法
Oct 25 Javascript
jQuery获取浏览器中的分辨率实现代码
Apr 23 Javascript
js获取客户端网卡的IP地址、MAC地址
Mar 26 Javascript
JavaScript使用concat连接数组的方法
Apr 06 Javascript
基于JavaScript实现轮播图代码
Jul 14 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
Vue项目中跨域问题解决方案
Jun 05 Javascript
vue如何安装使用Quill富文本编辑器
Sep 21 Javascript
js实现简单分页导航栏效果
Jun 28 Javascript
Angular如何由模板生成DOM树的方法
Dec 23 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
Aug 07 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(5) 类和对象
2010/02/16 PHP
php HandlerSocket的使用
2011/05/02 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
Dojo 学习要点
2010/09/03 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
基于python中theano库的线性回归
2018/08/31 Python
用Django写天气预报查询网站
2018/10/21 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
解决python 找不到module的问题
2020/02/12 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
python文件读取失败怎么处理
2020/06/23 Python
领导证婚人证婚词
2014/01/13 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
公司考勤管理制度
2015/08/04 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫