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 相关文章推荐
PNG背景在不同浏览器下的应用
Jun 22 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
May 02 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
JS实现一个按钮的方法
Feb 05 Javascript
Javascript中的作用域和上下文深入理解
Jul 03 Javascript
jQuery实现带渐显效果的人物多级关系图代码
Oct 16 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 Javascript
jquery+html仿翻页相册功能
Dec 20 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
Dec 30 Javascript
微信小程序修改swiper默认指示器样式的实例代码
Jul 18 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php获取参数的几种方法总结
2014/02/18 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
走出JavaScript初学困境—js初学
2008/12/29 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
vue组件name的作用小结
2018/05/23 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
Python描述器descriptor详解
2015/02/03 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
python实现定时发送qq消息
2019/01/18 Python
Python批量启动多线程代码实例
2020/02/18 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
python中time tzset()函数实例用法
2021/02/18 Python
集团公司人力资源部岗位职责
2014/01/03 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android