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 相关文章推荐
10个新的最有前途的JavaScript框架
Mar 12 Javascript
Js如何判断客户端是PC还是手持设备简单分析
Nov 22 Javascript
JS动态添加Table的TR,TD实现方法
Jan 28 Javascript
javascript 实现map集合
Apr 03 Javascript
Bootstrap每天必学之栅格系统(布局)
Nov 25 Javascript
JavaScript简单获取页面图片原始尺寸的方法
Jun 21 Javascript
vue中appear的用法
Aug 17 Javascript
Express下采用bcryptjs进行密码加密的方法
Feb 07 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
Jun 22 Javascript
学习RxJS之JavaScript框架Cycle.js
Jun 17 Javascript
微信小程序实现类似微信点击语音播放效果
Mar 30 Javascript
jquery实现穿梭框功能
Jan 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
php 计划任务 检测用户连接状态
2012/03/29 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
关于php开启错误提示的总结
2019/09/24 PHP
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
Python 闭包的使用方法
2017/09/07 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
python elasticsearch环境搭建详解
2019/09/02 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
python中的列表和元组区别分析
2020/12/30 Python
师范生的个人求职信范文
2014/01/04 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
四年级评语大全
2014/04/21 职场文书
年终考核实施方案
2014/05/26 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
计划生育证明书写要求
2014/09/17 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
长城导游词
2015/01/30 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
光荣之路观后感
2015/06/12 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书