node.js中express中间件body-parser的介绍与用法详解
前言
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 |
|
compress |
|
cookiesession |
|
logger |
|
cookieparser |
|
session |
|
favicon |
|
response-time |
|
error-handler |
|
method-override |
|
timeout |
|
vhost |
|
csrf |
body-parser
我是在学习nodejs时候,对着书本的例子时,使用bodyparser这个中间件,在终端运行出问题,报错大概意思也是express4.0中没有bodyparser这个内置中间件了,还给了body-parser的github源代码地址:.
经过看源代码下面的说明知道了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' }));
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: 什么是五心烦热?中医食疗调理效果佳
下一篇: 风湿吃什么水果比较好
推荐阅读