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 相关文章推荐
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
jquery.validate使用攻略 第五步 正则验证
Jul 01 Javascript
jQuery的.live()和.die() 使用介绍
Sep 10 Javascript
jQuery对指定元素中指定字符串进行替换的方法
Mar 17 Javascript
详解JavaScript中的表单验证
Jun 16 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
Oct 14 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
Feb 21 Javascript
Vue cli+mui 区域滚动的实例代码
Jan 25 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
Nov 07 jQuery
jQuery插件实现图片轮播效果
Oct 19 jQuery
微信小程序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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
使用adodb lite解决问题
2006/12/31 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
php防止sql注入代码实例
2013/12/18 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
js获取ip和地区
2017/03/10 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
Python 文件操作的详解及实例
2017/09/18 Python
python内置数据类型之列表操作
2018/11/12 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
python 实现图片裁剪小工具
2021/02/02 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
Android interview questions
2016/12/25 面试题
安全生产标语大全
2014/10/06 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
股权转让协议书
2014/12/07 职场文书
中秋客户感谢信
2015/01/22 职场文书
大学生村官入党自传
2015/06/26 职场文书
担保书格式范文
2015/09/22 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python