express 中间件body-parser使用

一、定义

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);
});
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容