一、定义
nodej原生http模块中,主要是使用基于流的方式来接收数据和解析数据。
body-parser 是http解析中的中间件,使用了这个中间件,就可以解析JSON、RAW等请求体了。
二、原生http解析
原生的http是吧请求封装到request对象中,这也是一个可读流对象,如下所示:
const http = require('http');
//这是使用原先的http
http.createServer(function(request, response){
if(request.method.toLowerCase() === 'post'){
let body = '';
//此步骤为接收数据
request.on('data', function(chunk){
body += chunk;
});
//开始解析http头部
request.on('end', function(){
if(request.headers['content-type'].indexOf('application/json')!==-1){
JSON.parse(body);
}else if(request.headers['content-type'].indexOf('application/octet-stream')!==-1){
//Rwa格式请求体解析
}else if(request.headers['content-type'].indexOf('text/plain')!==-1){
//text文本格式请求体解析
}else if(request.headers['content-type'].indexOf('application/x-www-form-urlencoded')!==-1){
//url-encoded格式请求体解析
}else{
//其他格式解析
}
})
}else{
res.end('其他方式提交')
}
}).listen(3000)
三、body-parser解析
看到了上面的原先http解析,是不是感觉很麻烦,对于每种格式的请求,要不断的判断,这里就可以使用express中的body-parse中间件了,对于请求的解析,全部给我们封装好了。如下使用
let express = require("express");
let http = require("http");
let cache =require("./redis.js");
let app = express();
var bodyParser = require("body-parser");
//解析application/json
app.use(bodyParser.json());
//解析application/x-www-form-urlencoded
app.use(bodyParser.urlencoded());
三、为某个路由单独指定解析方式
let express = require("express");
let http = require("http");
let cache =require("./redis.js");
let app = express();
var bodyParser = require("body-parser");
//解析application/json
app.use(bodyParser.json());
//解析application/x-www-form-urlencoded
app.use(bodyParser.urlencoded());
//POST /login 中获取URL编码的请求体
app.post('/login', urlencodedParser, function(req, res){
if(!req.body) return res.sendStatus(400);
res.send('welcome, ' + req.body.username);
})
//POST /api/users 获取JSON编码的请求体
app.post('/api/users', jsonParser, function(req,res){
if(!req.body) return res.sendStatus(400);
//create user in req.body
})
五、获取请求参数
假设前端采用的是如下的传值方式
image.png
可用如下代码进行请求参数解析
let express = require("express");
let http = require("http");
let cache =require("./redis.js");
let app = express();
var bodyParser = require("body-parser");
//解析application/json
app.use(bodyParser.json());
app.get("/:id/about",function(request,response){
console.log(request.body.password);
response.send(request.params.id);
});
网友评论