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类后台管理菜单类-MenuSwitch
Sep 12 Javascript
javascript判断office版本示例
Apr 11 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
Dec 24 Javascript
详解js实现线段交点的三种算法
Aug 09 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
详解在Vue中通过自定义指令获取dom元素
Mar 04 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
vue中监听路由参数的变化及方法
Dec 06 Javascript
vue中watch的用法汇总
Dec 28 Vue.js
微信小程序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学习之 循环结构实现代码
2011/06/09 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
jQuery 动画基础教程
2008/12/25 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
Python 抓取动态网页内容方案详解
2014/12/25 Python
python+opencv实现动态物体追踪
2018/01/09 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
链表面试题-一个链表的结点结构
2015/05/04 面试题
生物科学系大学生的自我评价
2013/12/20 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
致800米运动员广播稿
2014/02/16 职场文书
教师对学生的寄语
2014/04/03 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
商铺门前三包责任书
2014/07/25 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
中秋联欢会主持词
2015/07/04 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
python之django路由和视图案例教程
2021/07/26 Python
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL