99 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const url = require("url");
// URL 解析
function parse(urlString, parseQueryString = false) {
return url.parse(urlString, parseQueryString);
}
// URL 格式化
function format(urlObject) {
return url.format(urlObject);
}
// 解析查询字符串
function parseQuery(query) {
const searchParams = new URLSearchParams(query);
const result = {};
for (const [key, value] of searchParams) {
result[key] = value;
}
return result;
}
// 格式化查询字符串
function formatQuery(queryObject) {
const searchParams = new URLSearchParams();
for (const [key, value] of Object.entries(queryObject)) {
searchParams.append(key, value);
}
return searchParams.toString();
}
// 解析路径名
function parsePath(path) {
return url.parse(path);
}
// 解析主机名
function parseHost(host) {
const { hostname, port } = url.parse(`http://${host}`);
return { hostname, port };
}
// 解析 URL 参数
function getQueryParam(urlString, param) {
const { query } = url.parse(urlString, true);
return query[param];
}
// 添加 URL 参数
function addQueryParam(urlString, param, value) {
const parsedUrl = url.parse(urlString, true);
parsedUrl.query[param] = value;
parsedUrl.search = null; // 清除 search以便 format 时使用 query
return url.format(parsedUrl);
}
// 移除 URL 参数
function removeQueryParam(urlString, param) {
const parsedUrl = url.parse(urlString, true);
delete parsedUrl.query[param];
parsedUrl.search = null;
return url.format(parsedUrl);
}
// 检查是否是绝对 URL
function isAbsolute(urlString) {
return url.parse(urlString).protocol !== null;
}
// 解析 URL 的各个部分
function parseComponents(urlString) {
const { protocol, auth, hostname, port, pathname, search, hash } =
url.parse(urlString);
return {
protocol: protocol?.replace(":", ""),
auth,
hostname,
port,
pathname,
search: search?.replace("?", ""),
hash: hash?.replace("#", ""),
};
}
module.exports = {
parse,
format,
parseQuery,
formatQuery,
parsePath,
parseHost,
getQueryParam,
addQueryParam,
removeQueryParam,
isAbsolute,
parseComponents,
};