• Node02


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

      

      

       

      

  • 相关阅读:
    C++操作Kafka使用Protobuf进行跨语言数据交互
    聊聊Disruptor 和 Aeron 这两个开源库
    DTrace arg0-kernel mode and arg1-user mode
    top
    how to write your first linux device driver
    how to compile and replace ubuntu kernel
    linux du
    c++ rvo vs std::move
    【Android】wifi开发
    无线局域网络 WIFI/WAPI/WLAN区别浅析
  • 原文地址:https://www.cnblogs.com/patriot/p/7991909.html
Copyright © 2020-2023  润新知