Appearance
Node 环境解析 URL 编码
为什么要解码 url?因为在 url 中有很多特殊字符是不能被显示的,例如出现了中文、特殊字符会被自动编码成 url 编码,导致请求的 query 参数与实际的 query 参数不一致,所以需要解码。
解码
使用decodeURIComponent
、decodeURI
内置 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
}
编码
使用 encodeURI
,encodeURIComponent
来将字符串进行 url 编码