Skip to content

Node 环境解析 URL 编码

​ 为什么要解码 url?因为在 url 中有很多特殊字符是不能被显示的,例如出现了中文、特殊字符会被自动编码成 url 编码,导致请求的 query 参数与实际的 query 参数不一致,所以需要解码。

解码

​ 使用decodeURIComponentdecodeURI内置 API 可以解析 url 编码。

​ 一个解析 query 参数的中间件:

js
  /**
   * 从url中解析query和path
   * @param {import('http').IncomingMessage} req
   */
  pathQueryParse(req) {
    const [path, queryString] = req.url.split('?')
    if (queryString === undefined) {
      req.queryString = ''
      req.query = {}
    } else {
      req.queryString = decodeURIComponent(queryString)
      req.query = req.queryString.split('&').reduce((obj, item) => {
        const [key, value] = item.split('=')
        return {
          ...obj,
          [key]: value ? value : ''
        }
      }, {})
    }
    req.path = path
  }
  /**
   * 从url中解析query和path
   * @param {import('http').IncomingMessage} req
   */
  pathQueryParse(req) {
    const [path, queryString] = req.url.split('?')
    if (queryString === undefined) {
      req.queryString = ''
      req.query = {}
    } else {
      req.queryString = decodeURIComponent(queryString)
      req.query = req.queryString.split('&').reduce((obj, item) => {
        const [key, value] = item.split('=')
        return {
          ...obj,
          [key]: value ? value : ''
        }
      }, {})
    }
    req.path = path
  }

编码

​ 使用 encodeURIencodeURIComponent来将字符串进行 url 编码