美文网首页
URL上的查询字符串解析

URL上的查询字符串解析

作者: 暖暖1500 | 来源:发表于2021-09-29 11:40 被阅读0次
const encode = encodeURIComponent;
const decode = decodeURIComponent;
class Query {
  // 解析字符串为字典格式
  resolveQuery(query = window.location.href, extraQuery = {}) {
    if (query) {
      let parsedQuery = {};
      let index = query.indexOf('?');
      query = index !== -1 ? query.slice(query.indexOf('?') + 1) : '';
      query = query.replace(/(\?|\#\/)/g, '&');
      try {
        parsedQuery = this.parsedQuery(query);
      } catch (e) {
        parsedQuery = {};
      }
      for (let key in extraQuery) {
        parsedQuery[key] = extraQuery[key];
      }
      return parsedQuery;
    } else {
      return extraQuery;
    }
  }

  stringifyQuery(obj) {
    const res = obj
      ? Object.keys(obj)
        .sort()
        .map((key) => {
          const val = obj[key];

          if (val === undefined) {
            return '';
          }

          if (val === null) {
            return encode(key);
          }

          if (Array.isArray(val)) {
            const result = [];
            val.slice().forEach((val2) => {
              if (val2 === undefined) {
                return;
              }
              if (val2 === null) {
                result.push(encode(key));
              } else {
                result.push(encode(key) + '=' + encode(val2));
              }
            });
            return result.join('&');
          }

          return encode(key) + '=' + encode(val);
        })
        .filter((x) => x.length > 0)
        .join('&')
      : null;
    return res ? `?${res}` : '';
  }

  parsedQuery(query) {
    const res = {};
    query = query.trim().replace(/^(\?|#|&)/, '');

    if (!query) {
      return res;
    }
    query.split('&').forEach((param) => {
      const parts = param.replace(/\+/g, ' ').split('=');
      const key = decode(parts.shift());
      const val = parts.length > 0 ? decode(parts.join('=')) : '';
      if (key === '') {
        return false;
      }
      if (res[key] === undefined) {
        res[key] = val;
      } else if (Array.isArray(res[key])) {
        res[key].push(val);
      } else {
        res[key] = [res[key]].concat(val);
      }
    });
    return res;
  }
}

const handleQuery = new Query();

export { handleQuery };

相关文章

  • QueryString参数处理小利器

    querystring(查询字符串) querystring 模块用于解析与格式化 URL 的查询字符串。 使用方...

  • querystring node.js

    querystring 模块 提供用于解析和格式化 URL 查询字符串的实用工具。主要就是用来解析url中查询字符...

  • NODE 构建Web应用

    构建web应用会遇到的问题 请求方法的判断 URL路径的解析 URL中查询字符串的解析 Cookie的解析 表单数...

  • URL上的查询字符串解析

  • NodeJS 中 querystring.parse() 实现原

    querystring.parse() 能把一个 URL 查询字符串(str)解析成一个键值对的集合。 例子,查询...

  • querystring模块

    querystring.parse() 方法将 URL 查询字符串 str 解析为键值对的集合。querystri...

  • http

    http状态码 querystring(查询字符串) querystring 模块提供用于解析和格式化 URL 查...

  • Node的QueryString模块

    querystring模块提供了一些实用工具,主要是用来解析和格式化查询字符串。 查询字符串 在一个完整的URL字...

  • url到返回数据

    url 解析,根据 dns 系统进行 ip 查找 url为啥要解析,dns查询规则是什么? DNS在数据库上存在域...

  • node之querystring

    querystring 模块提供了一些使用函数,用于解析与格式化URL查询字符串 querystring.esca...

网友评论

      本文标题:URL上的查询字符串解析

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