📅  最后修改于: 2023-12-03 15:05:39.858000             🧑  作者: Mango
在现代 TypeScript 开发中,处理 URL 是很常见的需求。虽然可以直接使用原生的 URL
类来处理,但使用 TypeScript 可以带来更好的类型推导和错误检查。
使用 URL
类,可以轻松地将一个字符串 URL 解析为可操作的对象。以下是一个例子:
const urlStr = 'https://www.example.com/path?foo=bar#fragment';
const url = new URL(urlStr);
console.log(url.hostname); // 'www.example.com'
console.log(url.pathname); // '/path'
console.log(url.searchParams.get('foo')); // 'bar'
console.log(url.hash); // '#fragment'
这里的 URL
对象提供了很多有用的成员,包括 protocol
、username
、password
、port
等等。
注意,对于一些旧的浏览器或运行环境,可能不支持 URL
类。在这种情况下,可以使用第三方库,如 url-parse
。
如果要构建一个字符串 URL,可以使用 URL
类或拼接字符串。然而,前者类型安全更好,容易维护。
const urlObj = {
protocol: 'https',
hostname: 'www.example.com',
path: '/path',
params: {
foo: 'bar'
},
hash: 'fragment'
};
const url = new URL(`${urlObj.protocol}://${urlObj.hostname}${urlObj.path}`);
if (urlObj.params) {
for (const [key, value] of Object.entries(urlObj.params)) {
url.searchParams.append(key, value);
}
}
if (urlObj.hash) {
url.hash = urlObj.hash;
}
console.log(url.toString()); // 'https://www.example.com/path?foo=bar#fragment'
这里的 urlObj
中包含了一些 URL 的部分,代码逐步构建出完整的 URL 对象,最后使用 toString()
方法转化为字符串。
在处理 URL 时,要对所涉及的数据进行合理的过滤和校验,防止出现恶意代码注入、越权访问等问题。一些常见的安全性问题包括:
为避免这些问题,要使用适当的过滤和校验方法,包括:
encodeURI()
或 encodeURIComponent()
。