Node02 - GET、POST数据解析

1、GET数据解析方法

   (01)、手动剪切  => 实例1   

          const http=require('http');
          http.createServer(function(req, res){
            var GET={};
            if (req.url.indexOf('?')!=-1){
              var arr=req.url.split('?');
              //arr[0] => 地址 /abc
              //arr[1] => 数据 user=bule&pass=1234
              var arr2=arr[1].split('&');
              for(var i=0; i<arr2.length; i++){
                var arr3 = arr2[i].split('=');
                //arr3[0] => 用户名 blue
                //arr3[1] => password 1234
                GET[arr3[0]]=arr3[i];
              }
            }else{
              var url=req.url;
            }
            // console.log(GET);
            res.write(GET.toString());
            res.end();
          }).listen(8080);

   (02)、利用 querystring(查询字符串) 解析 (该方法会把一个 URL 查询字符串 str 解析成一个键值对的集合。)

           querystring.parse(str[, sep[, eq[, options]]]

            str (string)    需要解析的 URL 查询的字符串

            sep (string)  用于界定查询字符串中的键值对的子字符串。默认为 ‘ & ’

            eq (string)   用于界定查询字符串中的键与值得子字符串。默认为 ‘ = ’          

            options <Object>
                  decodeURIComponent <Function> 解码查询字符串的字符时使用的函数。默认为 querystring.unescape()。
                  maxKeys <number> 指定要解析的键的最大数量。默认为 1000。指定为 0 则不限制。

            例如:quertstr = querystring.parse('name=bule&pass=1234&age=18');  

               控制台输出内容:{ name: 'bule', pass: '1234', age: '18' }

          *注释:querystring.parse 方法依然不是很特别方便,还有第三种方法。

   (03)、利用 url 解析

          url.parse(urlString[, parseQueryString[, slashesDenoteHost]])

              urlString <string> 要解析的 URL 字符串。
              parseQueryString <boolean> 如果为 true,则 query 属性总会通过 querystring 模块的 parse() 方法生成一个对象。 如果为 false,则返回的 URL 对象上的 query 属性会是一个未解析、未解码的字符串。 默认为 false。
              slashesDenoteHost <boolean> 如果为 true,则 // 之后至下一个 / 之前的字符串会被解析作为 host。 例如,//foo/bar 会被解析为 {host: 'foo', pathname: '/bar'} 而不是 {pathname: '//foo/bar'}。 默认为 false。
              url.parse() 方法会解析一个 URL 字符串并返回一个 URL 对象。

              如果urlString不是字符串将会抛出TypeError。

              如果auth属性存在但无法编码则抛出URIError。

          例如:urlLib.parse('https://www.baidu.com/index?name=bule&pass=1234&age=18',true);

                返回数据格式  =>      

                  Url {
                    protocol: 'https:', //获取及设置URL的协议(protocol)部分
                    slashes: true,
                    auth: null,
                    host: 'www.baidu.com', //获取及设置URL的主机(host)部分,
                                //*注=如果给host属性设置的值是无效值,那么该值将被忽略。
                    port: null,
                    hostname: 'www.baidu.com',
                    hash: null,
                    search: '?name=bule&pass=1234&age=18',   //获取及设置URL的序列化查询(query)部分部分。
                    query: 'name=bule&pass=1234&age=18',      //query 属性是不含开头 ASCII 问号(?)的查询字符串,或一个被

                                          //querystring 模块的 parse() 方法返回的对象。 query 属性是一个字符

                                          //串还是一个对象是由传入 url.parse() 的 parseQueryString 参数决定的。
                                          //例如:'query=string' or {'query': 'string'}
                    pathname: '/index', //地址
                    path: '/index?name=bule&pass=1234&age=18',
                    href: 'https://www.baidu.com/index?name=bule&pass=1234&age=18'
                   }

                   *注释:urlLib.parse(".....", true);加 true => query格式改变为obj格式

                      query: { name: 'bule', pass: '1234', age: '18' },

2、POST数据接收:POST数据比GET打得多

  (01)、 POST数据很大,所以需要分段接收

       实例: 

        //POST--req
        var str = '';//接收数据
        req.on("data",function(data){ //正在接收数据
        //每次迭代数据,数据有可能很大,会分很多段迭代
          str+=data;
        });
        req.on('end',function(){ //数据接收完成
        //通过解析querystring解析
        var POST = queryString.parse(str);
          console.log(POST);

          //输出格式=>  { user: 'bule', pass: '1234' }
        });

  

  

 

 

 

   

  

posted @ 2017-12-06 11:39  FallenLunatic  阅读(237)  评论(0编辑  收藏  举报