buildURL
构建URL
参数
参数名 | 参数类型 | 参数说明 |
---|---|---|
url | string | url 地址 |
params | Record<string, unknown> | URLSearchParams | url 参数 |
paramsSerializer | (params: Record<string, unknown> | URLSearchParams) => string | 自定义参数序列化 |
源代码&使用
ts
import { buildURL } from "@manzhixing/utilsxy";
const url = "http://botaoonline.com.cn/search";
const params = {
userName: "manzhixing",
password: "123456",
};
buildURL(url, params); // http://botaoonline.com.cn/search?userName=manzhixing&password=123456
ts
/*
* @Author: Chengbotao
* @Contact: https://github.com/chengbotao
*/
import { isURLSearchParams } from '../isxxx';
export function buildURL(
url: string,
params?: Record<string, unknown> | URLSearchParams,
paramsSerializer?: (params: Record<string, unknown> | URLSearchParams) => string
) {
if (!params) return url;
let serializerParams: string;
if (paramsSerializer) {
serializerParams = paramsSerializer(params);
} else if (isURLSearchParams(params)) {
serializerParams = params.toString();
} else {
const parts: string[] = [];
Object.getOwnPropertyNames(params).forEach((key) => {
const paramsVal = params[key];
if (paramsVal === null || typeof paramsVal === 'undefined') return;
let values: unknown[] = [];
if (Array.isArray(paramsVal)) {
values = paramsVal;
key += '[]';
} else {
values = [paramsVal];
}
values.forEach((val: unknown) => {
if (val instanceof Date) {
val = val.toISOString();
} else if (typeof val === 'object') {
val = JSON.stringify(val);
}
parts.push(`${key}=${val}`);
});
});
serializerParams = parts.join('&');
}
if (serializerParams) {
const markIndex = url.indexOf('#');
if (markIndex !== -1) {
url = url.slice(0, markIndex);
}
url += (url.indexOf('?') === -1 ? '?' : '&') + serializerParams;
}
return url;
}