美文网首页
尝试用nodejs写一个中间件

尝试用nodejs写一个中间件

作者: 王伯卿 | 来源:发表于2018-01-01 19:05 被阅读0次

    这个中间件是模仿body-parser写的,旨在明白中间件是什么以及如何工作的.

    当我们解析POST数据的时候,需要有body-parser作为中间的一步,这样我们才可以顺利的拿到req.body的数据.

    const express=require('express');
    const bodyParser=require('body-parser');
    
    var server=express();
    server.listen(3000);
    
    //POST数据的解析需要有中间件先解析一层
    //body.urlencoded会给req加上一个body属性
    //req.body本来就是不存在的
    //加上之后后面才可以正常输出
    server.use(bodyParser.urlencoded({}));
    
    server.use('/', function(req,res){
      console.log(req.body);//输出{ user: 'ccs', pass: '123' }
    });
    

    要实现这样的效果,我们需要新建一个中间件文件,取名为

    my-body-parser.js
    
    const querystring=require('querystring');
    
    //将一整个模块输出供别人使用
    module.exports=function(req,res,next){
      var str='';
      req.on('data',function(data){
        str+=data;
      });
      req.on('end',function(){
        req.body=querystring.parse(str);
        next();
      });
    }
    

    然后我们来使用这个中间件

    const express=require('express');
    //这个路径需要注意
    const myBodyParser=require('./libs/my-body-parser.js');
    
    var server=express();
    server.listen(3000);
    
    server.use(myBodyParser);
    server.use('/',function(req,res){
      console.log(req.body);
    });
    

    最后是我们的html文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    <body>
      <form action="http://localhost:3000" method="post">
        username <input type="text" name="user" value=""><br>
        password <input type="password" name="pass" value=""><br>
        <input type="submit" value="send">
      </form>
    </body>
    </html>
    

    最后测试通过,顺利输出json

    { user: 'ac', pass: 'dcvv' }
    

    相关文章

      网友评论

          本文标题:尝试用nodejs写一个中间件

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