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 相关文章推荐
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
基于jquery循环map功能的代码
Feb 26 Javascript
谷歌地图打不开的解决办法
Aug 07 Javascript
jquery中checkbox全选失效的解决方法
Dec 26 Javascript
jQuery的remove()方法使用详解
Aug 11 Javascript
Javascript随机标签云代码实例
Jun 21 Javascript
实例详解jQuery的无new构建
Aug 02 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
详解vue mint-ui源码解析之loadmore组件
Oct 11 Javascript
vuex实现的简单购物车功能示例
Feb 13 Javascript
详解vue后台系统登录态管理
Apr 02 Javascript
javascript实现简单打字游戏
Oct 29 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中exec函数和shell_exec函数的区别
2014/08/20 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
Python httplib模块使用实例
2015/04/11 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python进阶篇之字典操作总结
2016/11/16 Python
python 字典中取值的两种方法小结
2018/08/02 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
python else语句在循环中的运用详解
2020/07/06 Python
优秀教师获奖感言
2014/01/31 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
小学生校园广播稿
2014/09/28 职场文书
服务员态度差检讨书
2014/10/28 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
党校学习党性分析材料
2014/12/19 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
element多个表单校验的实现
2021/05/27 Javascript
Mysql开启外网访问
2022/05/15 MySQL
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python