真正开始解析 URI 之前,现需要对 URI 进行转义,而这个中间件就起到了这个目的

    • 转义 request.url
    • 转义 request._parsedUrl 内的内容( _parsedUrl 是由 parseurl 这个库解析 URL 生成的请求路径信息,内部有更详细的 URL 信息,许多库有用到里面的信息,所以有必要里面的内容也一并转义)

      1. export function decodeURIMiddleware(): Connect.NextHandleFunction {
      2. return (req, _, next) => {
      3. // #2195
      4. req.url = decodeURI(req.url!)
      5. // `sirv` middleware uses the req._parsedUrl values to find the file,
      6. // so decode it all together.
      7. // @ts-ignore
      8. const parsedUrl = req._parsedUrl
      9. for (const key of Object.keys(parsedUrl)) {
      10. const val = parsedUrl[key]
      11. if (val) parsedUrl[key] = decodeURI(val)
      12. }
      13. next()
      14. }
      15. }