express 解析post请求的数据格式

node.js依赖express解析post请求四种数据格式

请求的格式分为:
www-form-urlencoded
form-data
application/json
text/xml
1、www-form-urlencoded

当content-type为x-www-form-urlencoded时,表示上传的普通简单键值对 。这是http的post请求默认的数据格式,需要body-parser中间件的支持

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({
 extended:true
}));
app.post('/urlencoded', function(req, res){
 console.log(req.body);
 res.send("ok");
});
app.listen(3000);
2、form-data
var express = require('express');
var app = express();

// 2.1 一般用于数据上传,需要中间件connect-multiparty的支持
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.post('/formdata',multipartMiddleware, function (req, res) {
console.log(req.body);
res.send("ok");
});

//2.2form-data文件上传
//先安装multer包 npm i multer
const multer = require('multer');
const upload = multer({dest:'uploadFiles/'}) // 上传的文件保存的目录, uploadFiles表示目录名
// 第二个参数 .upload.single表示单文件上传, 'cover' 表示要上传的文件在本次上次数据中的键名。对应于前端页面上的:
//  <input type="file" name='cover'/>

app.post("/postfile", upload.single('cover'), function(req,res){
    // req.file 记录了文件上传的信息
    // req.body 记录了其它普通参数(非文件)的信息
	// 其它操作
})

app.listen(3000);
3、application/json

body-parser中间件支持json解析, 添加中间件进行解析即可

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.post('/postJSON',(req,res)=>{
    // 后端收到post传参
    console.log(req.body);
    res.send('/postJSON')
})
app.listen(3000);
4、text/xml

body-parser默认不支持这种数据格式
解决方法:把请求体参数按照字符串读取出来,然后使用 xml2json 包把字符串解析成json对象,然后对json对象进行操作,方便得多。
注意:我们还是要使用 body-parse 得到字符串,然后再转化.
利用req上定义的事件 data 来获取http请求流, end 事件结束请求流的处理.
利用 xml2json 把上面得到的请求参数流(我们直接转化为字符串)转化为 json 对象.
demo如下:

var express = require('express');
var bodyParser = require('body-parser');
var xml2json=require('xml2json');
var app = express();
app.use(bodyParser.urlencoded({
	extended: true
}));
app.post('/xml', function (req, res) {
	req.rawBody = '';//添加接收变量
	var json={};
	req.setEncoding('utf8');
	req.on('data', function(chunk) { 
		req.rawBody += chunk;
	});
	req.on('end', function() {
		json=xml2json.toJson(req.rawBody);
		res.send(JSON.stringify(json));
	}); 
});
app.listen(3000);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值