真正开始解析 URI 之前,现需要对 URI 进行转义,而这个中间件就起到了这个目的
- 转义
request.url
转义
request._parsedUrl
内的内容( _parsedUrl 是由 parseurl 这个库解析 URL 生成的请求路径信息,内部有更详细的 URL 信息,许多库有用到里面的信息,所以有必要里面的内容也一并转义)export function decodeURIMiddleware(): Connect.NextHandleFunction {
return (req, _, next) => {
// #2195
req.url = decodeURI(req.url!)
// `sirv` middleware uses the req._parsedUrl values to find the file,
// so decode it all together.
// @ts-ignore
const parsedUrl = req._parsedUrl
for (const key of Object.keys(parsedUrl)) {
const val = parsedUrl[key]
if (val) parsedUrl[key] = decodeURI(val)
}
next()
}
}