lazy-koala
v2.0.1
Published
A simple and powerful request library based on axios.
Downloads
14
Readme
lazy-koala
lazy-koala 是一个功能强大的 TypeScript 工具库,旨在为现代前端开发提供两大核心能力:
- 一个基于
axios的、高度可配置的 HTTP 客户端,简化网络请求和错误处理。 - 一套经过精心重构的、完全支持 Tree-Shaking 的前端工具函数集,涵盖了环境判断、数据格式化、Cookie 操作、函数防抖/节流等日常开发中的常见需求。
1. 安装
npm install lazy-koala axios --save2. HTTP 客户端
lazy-koala 的 HTTP 客户端旨在通过提供统一的配置、自动化的加载和错误处理以及链式调用等现代 API,来简化和标准化前端的网络请求。
初始化
在您的项目入口或专门的 API 配置文件中,通过 createLazyKoala 创建一个实例。
// src/api.ts
import { createLazyKoala, LazyKoalaOptions } from 'lazy-koala';
const options: LazyKoalaOptions = {
axiosConfig: { // 原生 Axios 配置
baseURL: 'https://api.example.com',
timeout: 30000,
withCredentials: true, // 示例:开启跨域请求携带 cookies
headers: { 'X-App-Version': '2.0.0' }
},
requestConfig: { // lazy-koala 全局默认请求配置
loading: true,
toast: true, // 默认所有请求失败时都弹窗提示
},
responseConfig: { // 响应成功/失败的判断标准
status: [0, '0', '1', '0000', '000000', 'ok', 'success', 200, 'SUCCESS', 'OK'], // 定义成功的业务状态码列表
codeKeys: ['errno', 'code', 'retcode', 'respCode', 'resultCode', 'status', 'errcode'], // 定义业务状态码在响应体中的 key 名称列表
msgKeys: ['msg', 'message', 'desc', 'errmsg', 'respMsg', 'error', 'errorMsg'] // 定义业务消息在响应体中的 key 名称列表
},
onFailure: (response) => { // 业务失败时的全局回调
console.log('业务失败:', response.data);
},
onError: (error) => { // 网络错误时的全局回调
console.error('网络错误:', error.message);
},
loadingStart: () => { /* 自定义 Loading 开始的回调,例如显示全局 Loading 动画 */ },
loadingEnd: (loadingId) => { /* 自定义 Loading 结束的回调,参数为 loadingStart 的返回值 */ },
errToast: (msg) => { /* 自定义错误提示回调,参数为错误消息字符串 */ },
processRequestConfig: (config) => { /* 在请求发出前的最后修改 Axios 配置的机会 */ return config; },
processResponseData: (data, response) => { /* 在响应被处理前的最后修改响应数据的机会 */ return data; },
strictHttpStatusCheck: false, // 严格 HTTP 模式
returnFullResponse: false, // 设置为 true 以返回完整的 AxiosResponse 对象
};
export const api = createLazyKoala(options);默认情况下,如未提供
loadingStart、loadingEnd或errToast,库会使用alert弹窗提示错误,并在控制台输出 Loading 的开始与结束日志,方便开箱即用(可按需替换为业务 UI)。
钩子 (Hooks)
lazy-koala 提供了两个强大的全局钩子,用于在请求的生命周期中注入自定义逻辑,例如统一的加解密。
processRequestConfig?: (config: AxiosRequestConfig) => Promise<AxiosRequestConfig> | AxiosRequestConfig- 前置钩子,在请求被发送前的最后一刻执行。
- 场景: 异步获取最新 token 并添加到
headers,或对请求数据进行加密。
processResponseData?: (data: any, response: AxiosResponse) => Promise<any> | any- 后置钩子,在收到响应后、
lazy-koala内部逻辑处理前第一时间执行。 - 场景: 对响应数据进行统一解密或格式转换。
- 后置钩子,在收到响应后、
示例:统一加解密
// 伪代码:假设你已经有了加密和解密函数
async function encrypt(data: any): Promise<string> {
// ... 你的加密逻辑
return 'encrypted-string...';
}
async function decrypt(data: string): Promise<any> {
// ... 你的解密逻辑
return { original: 'data' };
}
const api = createLazyKoala({
// ...
// 1. 发送前:加密请求体
async processRequestConfig(config) {
if (config.data) {
config.data = await encrypt(config.data);
}
return config;
},
// 2. 接收后:解密响应体
async processResponseData(data, response) {
// 假设只有成功的字符串响应需要解密
if (response.status === 200 && typeof data === 'string') {
return await decrypt(data);
}
return data;
}
});
// 使用时,业务代码完全无感,仍然传递和接收普通对象
const decryptedResponse = await api.post('/secure-endpoint', { my: 'secret' });发起请求
使用您创建的 api 实例来发起请求。配置单次请求请使用 .config() 链式调用。
import { api } from './api';
// GET 请求
api.get('/users', { page: 1 }).then(res => console.log(res));
// POST 请求
api.post('/users', { name: 'Koala' }).then(res => console.log(res));
// 使用 .config() 配置单次请求 (本次不显示 loading)
api.config({ loading: false })
.get('/notifications')
.then(res => { /* ... */ });返回完整响应 (returnFullResponse)
默认情况下,为了方便,lazy-koala 的请求方法在成功后只返回响应体中的 data 部分。
如果您需要获取包括 HTTP 状态码、响应头在内的完整 AxiosResponse 对象,可以在初始化时将 returnFullResponse 设置为 true。
// 默认行为 (returnFullResponse: false)
const data = await api.get('/user/1');
// data: { id: 1, name: 'Koala' }
// 开启新行为
const apiWithFullResponse = createLazyKoala({ returnFullResponse: true });
const response = await apiWithFullResponse.get('/user/1');
// response: {
// status: 200,
// headers: { ... },
// data: { id: 1, name: 'Koala' }
// }HTTP 客户端方法返回数据说明
get<T = any>(url: string, params?: any, axiosConfig?: AxiosRequestConfig): Promise<T>post<T = any>(url: string, data?: any, axiosConfig?: AxiosRequestConfig): Promise<T>upload<T = any>(url: string, data?: any, axiosConfig?: AxiosRequestConfig): Promise<T>- 说明: 这些方法在请求成功时,Promise 会解析为后端返回的业务数据
T(通常是响应体中的data部分)。如果发生业务失败或网络错误,Promise 会被拒绝,并返回相应的错误信息或业务数据。
- 说明: 这些方法在请求成功时,Promise 会解析为后端返回的业务数据
download<T = any>(url: string, data?: any, method?: 'GET' | 'POST', axiosConfig?: AxiosRequestConfig): Promise<AxiosResponse<Blob> | T>- 说明: 默认以
POST发送请求。若响应被识别为“流/附件”(见下文“响应判定流程”),Promise 会解析为完整的AxiosResponse<Blob>;否则行为与get/post一致,直接返回业务数据T。
- 说明: 默认以
api.axiosInstance
readonly axiosInstance: AxiosInstance- 说明: 暴露内部使用的 Axios 实例,允许高级用户直接访问和配置 Axios 的原生功能,例如添加自定义拦截器等。
api 实例方法补充
cancel(key: string): void- 说明: 手动取消指定
key的进行中请求。key默认是请求 URL,也可以通过.config({ id: 'your-request-id' })显式指定。
- 说明: 手动取消指定
isPending(key: string): boolean- 说明: 判断指定
key的请求是否仍在进行中。
- 说明: 判断指定
api.config(tempConfig) 参数说明
api.config() 方法接受一个 tempConfig 对象,用于为下一次请求设置临时的、一次性的配置。该对象的类型为 LazyKoalaRequestConfig,包含以下属性:
loading?: boolean- 说明: 本次请求是否触发全局 Loading。默认为
true。
- 说明: 本次请求是否触发全局 Loading。默认为
preventRepeat?: boolean- 说明: 是否阻止重复的、未完成的请求。默认为
true。
- 说明: 是否阻止重复的、未完成的请求。默认为
id?: string- 说明: 手动指定请求的唯一 ID,用于防重/取消。如果未指定,将使用请求 URL 作为 ID。
错误处理相关配置:
toastOnFailure?: boolean- 说明: 业务失败时是否自动弹窗提示。默认为
true。
- 说明: 业务失败时是否自动弹窗提示。默认为
toastOnError?: boolean- 说明: 网络错误时是否自动弹窗提示。默认为
true。
- 说明: 网络错误时是否自动弹窗提示。默认为
callbackOnFailure?: boolean- 说明: 业务失败时是否触发全局
onFailure回调。默认为true。
- 说明: 业务失败时是否触发全局
callbackOnError?: boolean- 说明: 网络错误时是否触发全局
onError回调。默认为true。
- 说明: 网络错误时是否触发全局
快捷方式:
toast?: boolean- 说明: 快捷方式,同时设置
toastOnFailure和toastOnError。具体配置的优先级高于快捷方式。
- 说明: 快捷方式,同时设置
callback?: boolean- 说明: 快捷方式,同时设置
callbackOnFailure和callbackOnError。具体配置的优先级高于快捷方式。
- 说明: 快捷方式,同时设置
Loading 覆盖(单次请求):
loadingStart?: () => any/loadingEnd?: (loadingId: any) => void- 说明: 覆盖本次请求的 Loading 显示/关闭逻辑。
loadingStart的返回值会作为loadingEnd的参数传入。
- 说明: 覆盖本次请求的 Loading 显示/关闭逻辑。
进阶:
processRequestConfig(位于全局options中)支持返回 Promise,axios 会等待其完成。
(关于 HTTP 客户端更详细的类型,请直接从本库导出的类型定义中查看,如 LazyKoalaOptions、LazyKoalaRequestConfig、LazyKoalaInstance 等。)
2.1 进阶能力与内部机制
以下内容对应于 src/core 中的重构实现。
响应判定流程(JSON / Blob / 流)
- 识别为流/附件:如果响应头包含
Content-Disposition: attachment,或Content-Type为以下之一:application/pdf、application/zip、application/x-tar、application/gzip、application/vnd.ms-excel、application/csv、application/octet-stream- 则直接返回完整
AxiosResponse<Blob>(常用于下载)。
- 非 JSON 且非 Blob:直接返回原始
data(不做业务码判断)。 - 严格 HTTP 模式开启(
strictHttpStatusCheck = true):直接返回data(仅以 HTTP 状态码判定成败)。 - 默认(业务码判断):
- 从响应体中按
codeKeys寻找第一个存在的业务码字段(如code/errno/status/...),若其值存在且包含于status白名单中,则视为成功,返回整个响应体data。 - 否则按
msgKeys找到业务消息(如msg/message/error/...),根据toastOnFailure、callbackOnFailure调用errToast、onFailure,并reject(data)。
- 从响应体中按
当响应体为 Blob 但内容其实是 JSON 错误(常见于下载接口),库会自动尝试将 Blob 转为文本再解析为 JSON 并按以上规则处理;若解析失败,则按“流/附件”成功返回。
请求去重与取消
- 去重策略(
preventRepeat: true,默认开启):- 以
id(未指定时为url)作为请求唯一键。 - 当检测到“相同键”的新请求发起时,会自动取消前一个未完成的相同请求(使用
AbortController),并继续执行最新请求。 - 取消属于主动行为,不会触发 toast。
- 以
- 手动控制:
api.cancel(key):手动取消指定键的请求。api.isPending(key):查询指定键是否仍在进行中。
示例:
// 使用自定义请求键
api.config({ id: 'get-user' }).get('/user');
// 短时间内再次发起同键请求,将取消之前的请求
api.config({ id: 'get-user' }).get('/user');Loading 行为
- 全局聚合:当第一个请求开始时触发
loadingStart,最后一个请求结束时触发loadingEnd(内部使用集合管理进行中的请求)。 - 单次覆盖:
- 若在
.config()中提供了loadingStart/loadingEnd,则该次请求优先使用它们,并将loadingStart的返回值作为参数传入loadingEnd; - 若执行出错,将自动回退到全局 Loading 控制器。
- 若在
配置合并与一次性 .config()
.config()配置仅对下一次请求生效,请求发出后自动清空(链式安全)。- Headers 合并顺序(后者优先):
- 全局
axiosConfig.headers< 2) 单次请求的axiosConfig.headers(即api.get等方法的第三个参数)。
- 全局
- GET 参数合并:多来源
params会合并,后设置的键覆盖先前的值。
严格 HTTP 模式与 validateStatus
- 当
strictHttpStatusCheck = true:createLazyKoala会设置axios.validateStatus;若在axiosConfig中未提供validateStatus,默认仅status === 200视为成功;- 成功分支中直接返回
data(不做业务码判断); - 失败分支:若存在
error.response,按toastOnFailure/callbackOnFailure处理;网络层错误则按toastOnError/callbackOnError处理。
导出的类型与常量
从 lazy-koala 包直接导出以下内容,便于类型标注与配置复用:
import {
createLazyKoala,
// 常量(可用于自定义 responseConfig)
SUCCESS_STATUS_CODES,
RESPONSE_CODE_KEYS,
RESPONSE_MSG_KEYS,
// 类型
type LazyKoalaOptions,
type LazyKoalaRequestConfig,
type LazyKoalaInstance,
} from 'lazy-koala';进阶示例
- 异步修改请求配置(例如动态刷新 Token):
createLazyKoala({
async processRequestConfig(config) {
const token = await getFreshToken();
return { ...config, headers: { ...config.headers, Authorization: `Bearer ${token}` } };
}
});- 单次请求自定义 Loading:
api.config({
loading: true,
loadingStart: () => showGlobalBar(),
loadingEnd: () => hideGlobalBar(),
}).get('/profile');- 下载文件(返回完整 AxiosResponse):
const res = await api.download('/export', { type: 'csv' });
// res.data 为 Blob,可用 URL.createObjectURL 保存到本地3. 工具函数集
lazy-koala 提供了一系列开箱即用的工具函数。所有函数均为独立的命名导出,完美支持 Tree-Shaking。
统一导入方式:
import { getCookie, createDebounce, isMobileDevice } from 'lazy-koala/utils';Clipboard (剪贴板)
提供安全、可靠的异步剪贴板复制功能。
copyToClipboard(text)- 功能: 异步地将文本复制到用户剪贴板。优先使用现代、安全的
navigator.clipboardAPI,并为旧浏览器或不安全环境(HTTP)提供回退方案。 - 参数:
text: string: 需要被复制的文本内容。
- 返回:
Promise<void>- 一个不带任何返回值的 Promise。你可以通过
await或.then()来确认复制操作已完成,或通过try...catch/.catch()捕获可能发生的错误。
- 一个不带任何返回值的 Promise。你可以通过
- 注意: 只能在具有
navigator和document的浏览器环境中调用;在 SSR 或非安全上下文下会抛出错误。 - 示例:
import { copyToClipboard } from 'lazy-koala/utils'; async function handleCopy(text) { try { await copyToClipboard(text); alert('复制成功!'); } catch (error) { console.error('复制失败:', error.message); } } handleCopy('Hello, World!');
- 功能: 异步地将文本复制到用户剪贴板。优先使用现代、安全的
Cookie (Cookie 管理)
提供功能全面、SSR 安全的 Cookie 操作方法。
setCookie(name, value, options?)- 功能: 设置一个 Cookie。
- 参数:
name: string: Cookie 的名称。value: string: Cookie 的值,函数会自动对其进行 URI 编码。options?: CookieOptions: 一个包含额外选项的对象。days?: number: Cookie 的有效期(天数)。path?: string: Cookie 的有效路径,默认为'/'(整个网站)。domain?: string: Cookie 的有效域名。secure?: boolean: 若为true,则 Cookie 只在 HTTPS 连接中发送。samesite?: 'Strict' | 'Lax' | 'None': 控制跨站请求伪造(CSRF)策略。
getCookie(name)- 功能: 获取指定名称的 Cookie。
- 返回:
string | null- 返回解码后的 Cookie 值,如果不存在则返回null。
getAllCookies()- 功能: 以对象形式获取所有 Cookie。
- 返回:
Record<string, string>- 包含所有 Cookie 键值对的对象。例如:{ "user_id": "123", "theme": "dark" }。
removeCookie(name, options?)- 功能: 删除一个 Cookie。注意: 必须提供与设置时相同的
path和domain才能保证成功删除。
- 功能: 删除一个 Cookie。注意: 必须提供与设置时相同的
clearAllCookies()- 功能: 尽力清除当前路径下的所有 Cookie。
示例:
import { setCookie, getCookie } from 'lazy-koala/utils'; // 设置一个有效期为 7 天, 作用于根路径的 Cookie setCookie('user_id', '12345', { days: 7, path: '/' }); // 读取 Cookie const userId = getCookie('user_id'); // -> "12345"
CountDown (倒计时)
一个精确、可控的倒计时函数。
createCountdown(options)- 功能: 创建一个新的倒计时实例。
- 参数 (
options): 类型为CountDownOptions,包含以下属性:totalSeconds: number: 倒计时的总秒数。onTick?: (remainingSeconds: number) => void: (可选) 每秒钟触发一次的回调函数,它会接收到剩余的秒数作为参数。onEnd?: () => void: (可选) 倒计时归零时触发的回调函数。
- 返回: 一个包含以下方法的对象:
.start(): 开始或恢复倒计时。.stop(): 暂停倒计时。.reset(): 停止并将倒计时重置为初始总秒数。.getRemainingSeconds(): 获取当前剩余的秒数。
示例:
import { createCountdown } from 'lazy-koala/utils'; const countdown = createCountdown({ totalSeconds: 60, onTick: (sec) => console.log(`剩余 ${sec} 秒`), onEnd: () => console.log('倒计时结束!'), }); countdown.start();
Debounce (函数防抖)
createDebounce(func, delay?)- 功能: 创建一个防抖函数。该函数在被连续调用时,只有在最后一次调用结束、并经过
delay毫秒后才会真正执行。 - 参数:
func: Function: 需要进行防抖处理的原始函数。delay?: number: 延迟的毫秒数,默认为1000。
- 返回: 一个新的、经过防抖处理的函数。
- 功能: 创建一个防抖函数。该函数在被连续调用时,只有在最后一次调用结束、并经过
示例: (常用于搜索框输入)
import { createDebounce } from 'lazy-koala/utils'; // 假设这是我们的 API 请求函数 const fetchSuggestions = (query) => { console.log('Fetching suggestions for:', query); }; const debouncedFetch = createDebounce(fetchSuggestions, 500); // 在 input 元素的 oninput 事件中调用 debouncedFetch // <input oninput="debouncedFetch(event.target.value)" /> // 只有当用户停止输入 500ms 后,才会打印日志
Environment (环境判断)
提供预先计算好的、用于判断当前环境的布尔常量。
isMobileDevice:true如果用户代理是 iPhone 或 Android。isWeChat:true如果在微信内置浏览器中。isAlipay:true如果在支付宝内置浏览器中。isCMCC:true如果在和生活 App 环境中。示例:
import { isMobileDevice, isWeChat } from 'lazy-koala/utils'; if (isMobileDevice) { console.log('正在移动设备上运行。'); } if (isWeChat) { // 可以在此调用微信 JSSDK }
Format (格式化)
formatDate(date, formatStr?)- 功能: 将 Date 对象格式化为指定字符串。
- 参数:
date: Date: 需要格式化的 Date 对象。formatStr?: string: 格式化模板,默认为'YYYY-MM-DD HH:mm:ss'。
- 返回:
string- 格式化后的日期字符串。例如:'2023-10-26 15:45:05'。
formatPrice(amount, locale?)- 功能: 使用浏览器内置的
Intl.NumberFormatAPI 将数字格式化为带千位分隔符的价格字符串。 - 参数:
amount: number | string: 需要格式化的金额。locale?: string: (可选) 语言环境代码,如'en-US'或'de-DE'。默认为浏览器当前环境。
- 返回:
string- 格式化后的价格字符串。例如:'12,345.67'。
- 功能: 使用浏览器内置的
示例:
import { formatDate, formatPrice } from 'lazy-koala/utils'; console.log(formatDate(new Date())); // -> "2025-10-14 10:30:00" (示例) console.log(formatPrice(12345.67)); // -> "12,345.67"
File Operations (文件操作)
selectFile(options?)- 功能: 编程式地打开一个文件选择对话框。
- 参数 (
options):accept?: string: 允许的文件类型,与<input type="file">的accept属性相同。例如:'image/*','.pdf','image/png,image/jpeg'。multiple?: boolean: 若为true,则允许用户选择多个文件。capture?: 'user' | 'environment': (仅限移动端) 用于直接调用摄像头,'user'为前置,'environment'为后置。
- 返回:
Promise<File | FileList>- 如果multiple为false,则解析为单个File对象;如果为true,则解析为FileList对象。
saveFile(fileData, fileName)- 功能: 在浏览器中触发一个文件下载操作。
- 参数:
fileData: BlobPart: 文件内容,可以是字符串、Blob、ArrayBuffer 等。fileName: string: 下载时预设的文件名。
示例:
import { selectFile, saveFile } from 'lazy-koala/utils'; // 异步选择图片 async function chooseImage() { try { const file = await selectFile({ accept: 'image/*' }); console.log('Selected file:', file.name); } catch (error) { console.log('用户取消了选择'); } } // 保存一个文本文件 saveFile('Hello, World!', 'greeting.txt');
Random (随机数)
randomInt(min, max)- 功能: 生成一个在
min和max之间的随机整数(包含min和max)。 - 返回:
number- 一个整数。
- 功能: 生成一个在
randomElement(array)- 功能: 从数组中随机取出一个元素及其索引。
- 返回:
{ value: T, index: number } | null- 一个包含值和索引的对象,如果数组为空则返回null。
示例:
import { randomInt, randomElement } from 'lazy-koala/utils'; console.log(randomInt(1, 10)); // -> 可能是 1 到 10 之间的任何整数 const fruits = ['apple', 'banana', 'cherry']; const fruit = randomElement(fruits); // fruit 可能为 { value: 'banana', index: 1 }
Storage (本地存储)
对 localStorage 和 sessionStorage 的一层安全封装,提供自动的 JSON 序列化/反序列化,并支持 SSR 环境下静默失败。
localStore: 封装localStorage。sessionStore: 封装sessionStorage。.setItem(name, value)- 参数:
name: string,value: any(任何可被 JSON 序列化的值,如对象、数组、字符串等)。
- 参数:
.getItem<T>(name)- 返回:
T | null- 返回经过 JSON 解析后的原始类型数据,如果不存在则返回null。
- 返回:
.removeItem(name): 移除一个存储项。.clear(): 清空所有由该库创建的存储项。示例:
import { localStore } from 'lazy-koala/utils'; const user = { name: 'Koala', id: 1 }; localStore.setItem('currentUser', user); const savedUser = localStore.getItem<{ name: string, id: number }>('currentUser'); console.log(savedUser.name); // -> "Koala"
Throttle (函数节流)
createThrottle(func, delay?)- 功能: 创建一个节流函数。在指定的时间间隔
delay内,该函数最多只会被执行一次。 - 参数:
func: Function: 需要进行节流处理的原始函数。delay?: number: 时间间隔的毫秒数,默认为1000。
- 返回: 一个新的、经过节流处理的函数。
- 功能: 创建一个节流函数。在指定的时间间隔
示例: (常用于监听滚动、窗口缩放等高频事件)
import { createThrottle } from 'lazy-koala/utils'; const handleScroll = () => { console.log('Window is scrolling!'); }; const throttledScrollHandler = createThrottle(handleScroll, 1000); // window.addEventListener('scroll', throttledScrollHandler); // 日志每秒最多只会打印一次
URL Params (URL 参数)
提供一系列函数用于方便地获取 URL 中的 search (查询字符串) 和 hash 参数。
getParams(paramString, key?)- 功能: 解析任意形态的查询字符串(例如来自后端或手动拼接的
foo=bar&baz=1)。 - 参数:
paramString: string: 待解析的原始查询字符串,支持是否包含开头的?。key?: string: (可选) 指定单个 key 时直接返回对应的值。
- 返回: 未提供
key时返回Record<string, string>;提供时返回string | null。
- 功能: 解析任意形态的查询字符串(例如来自后端或手动拼接的
searchParams(key?)- 功能: 获取
location.search(?后面的部分) 中的参数。 - 参数:
key?: string- (可选) 如果提供key,则返回该key对应的单个值。 - 返回: 如果提供
key,返回string | null;如果不提供key,返回Record<string, string>(包含所有参数的键值对对象)。
- 功能: 获取
hashParams(key?)- 功能: 获取
location.hash(#后面的部分) 中的参数。
- 功能: 获取
urlParams(key?)- 功能: 一个便捷函数,优先从
search中获取,若无则从hash中获取。
- 功能: 一个便捷函数,优先从
示例:
import { getParams, searchParams, urlParams } from 'lazy-koala/utils'; // 假设当前 URL 是 https://example.com?user=koala&id=123#token=abc const parsed = getParams('?user=koala&id=123'); // -> { user: 'koala', id: '123' } const userId = searchParams('id'); // -> "123" const allSearchParams = searchParams(); // -> { user: 'koala', id: '123' } const token = urlParams('token'); // -> "abc"
UUID
generateUUID()- 功能: 生成一个 v4 版本的 UUID (通用唯一标识符) 字符串。
- 返回:
string- 一个 UUID 字符串。例如:'123e4567-e89b-12d3-a456-426614174000'。
示例:
import { generateUUID } from 'lazy-koala/utils'; const uniqueId = generateUUID();
Validation (数据校验)
提供一系列常用的数据格式校验函数,全部返回布尔值 true 或 false。
isMobileNumber(str): 检查字符串是否为 11 位、以 '1' 开头的手机号。isSMS(str, len?): 检查字符串是否为指定长度的纯数字验证码 (默认长度为 6)。isEmail(str): 检查字符串是否为合法的 Email 格式。isURL(str): 检查字符串是否为合法的 URL。isEmpty(value): 检查一个值是否为空。null,undefined, 空字符串 (''), 空数组 ([]), 空对象 ({}) 均被视为空。isIdCard(str): 检查字符串是否为合法的 18 位中国身份证号(包含最后一位的校验位检查)。示例:
import { isEmail, isEmpty } from 'lazy-koala/utils'; console.log(isEmail('[email protected]')); // -> true console.log(isEmail('[email protected]')); // -> false console.log(isEmpty([])); // -> true console.log(isEmpty({})); // -> true console.log(isEmpty(' ')); // -> true
