Express body-parser中间件

  • body-parser是用于解析HTTP请求体的中间件,可以解析JSON、Raw、text、URL-encoded格式的请求体;

  • 只使用node原生的http模块,不依赖第三方中间件,可用如下方法解析请求体:

    const http = require('http');
    http.createServer(function(req, res){
    if(req.method.toLowerCase() === 'post'){
    let body = '';
    //此步骤为接收数据
    req.on('data', function(chunk){
    body += chunk;
    });
    //开始解析
    req.on('end', function(){
    if(req.headers['content-type'].indexOf('application/json')!-1){
    JSON.parse(body);
    }else if(req.headers['content-type'].indexOf('application/octet-stream')!
    -1){
    //raw格式请求体解析
    }else if(req.headers['content-type'].indexOf('text/plain')!-1){
    //text文本格式请求体解析
    }else if(req.headers['content-type'].indexOf('application/x-www-form-urlencoded')!
    -1){
    //url-encoded格式请求体解析
    }else{
    //其他格式解析
    }
    })
    }else{
    res.end('其他方式提交')
    }
    }).listen(3000)

  • Express框架默认使用body-parser作为请求体解析中间件,在app.js文件中找到 var bodyParser = require('body-parser');,这样就可以在项目的application级别,引入了body-parser模块处理请求体。在实际项目中,不同路径可能要求用户使用不同的内容类型,body-parser还支持为单个express路由添加请求体解析,比如:

    var express = require('express');
    var bodyParser = require('body-parser');
    var app = new express();

    //创建application/json解析
    var jsonParser = bodyParser.json();

    //创建application/x-www-form-urlencoded
    var urlencodedParser = bodyParser.urlencoded({extended: false});

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

  • body-parser模块的API:
      当请求体解析之后,解析值会被放到req.body属性中,当内容为空时候,为一个空对象{}
      ---bodyParser.json() --解析JSON格式
      ---bodyParser.raw() --解析二进制格式
      ---bodyParser.text() --解析文本格式
      ---bodyParser.urlencoded() --解析文本格式

posted @ 2019-12-30 11:48  jack·wang  阅读(287)  评论(0)    收藏  举报