美文网首页
express 中间件body-parser使用

express 中间件body-parser使用

作者: 奋斗live | 来源:发表于2019-03-29 13:14 被阅读0次
    一、定义

    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);
    });
    

    相关文章

      网友评论

          本文标题:express 中间件body-parser使用

          本文链接:https://www.haomeiwen.com/subject/cfqlbqtx.html