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 基础学习笔记
May 29 Javascript
js 固定悬浮效果实现思路代码
Aug 02 Javascript
js使用removeChild方法动态删除div元素
Aug 01 Javascript
7个去伪存真的JavaScript面试题
Jan 07 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
AngularJS常见过滤器用法实例总结
Jul 06 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 jQuery
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
Nov 27 Javascript
React Native 截屏组件的示例代码
Dec 06 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
Prototype Date对象 学习
2009/07/12 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
劲霸男装广告词
2014/03/21 职场文书
促销活动总结怎么写
2014/06/25 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
讨论nginx location 顺序问题
2022/05/30 Servers