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 统计时间
Mar 09 Javascript
JS查看对象功能代码
Apr 25 Javascript
Iframe thickbox2.0使用的方法
Mar 05 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
详解如何使用 vue-cli 开发多页应用
Dec 16 Javascript
javascript中如何判断类型汇总
May 14 Javascript
vue如何搭建多页面多系统应用
Jun 17 Javascript
JavaScript如何操作css
Oct 24 Javascript
PHP 502bad gateway原因及解决方案
Nov 13 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 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
Yii2简单实现多语言配置的方法
2016/07/23 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
python使用urlparse分析网址中域名的方法
2015/04/15 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python识别验证码图片实例详解
2020/02/17 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
python线程里哪种模块比较适合
2020/08/02 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
省级优秀毕业生主要事迹
2014/05/29 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
单位考核聘任报告
2015/03/02 职场文书
慈善募捐倡议书
2015/04/27 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis