主题
Ky 最佳实践
为了在项目中高效、稳定地使用 Ky,以下是一些推荐的最佳实践。
1. 创建统一实例
- 使用
ky.create()创建全局或模块实例,统一管理前缀 URL、请求头、超时和重试策略。
javascript
import ky from 'ky';
export const api = ky.create({
prefixUrl: 'https://api.example.com',
headers: { 'Authorization': 'Bearer TOKEN' },
timeout: 5000,
retry: 2
});2. 使用 Hooks 统一拦截请求与响应
- 统一处理请求日志、错误处理、响应格式化。
javascript
api.hooks.beforeRequest.push(request => {
console.log('请求开始:', request.url);
});
api.hooks.afterResponse.push((request, options, response) => {
if (!response.ok) console.warn('请求失败:', response.status);
});3. 错误分类处理
- 区分 HTTPError、TimeoutError、AbortError,针对不同类型采取不同处理策略。
javascript
try {
await api.get('data').json();
} catch (error) {
if (error.name === 'HTTPError') { /* 处理 HTTP 错误 */ }
else if (error.name === 'TimeoutError') { /* 处理超时 */ }
else if (error.name === 'AbortError') { /* 处理取消请求 */ }
}4. 统一响应格式解析
- 对返回数据结构一致的 API,可在
afterResponse中统一解析 JSON 或处理状态码,减少重复代码。
5. 避免重复请求
- 对于同一接口的频繁请求,可结合缓存或节流策略,避免不必要的网络请求。
6. 使用 TypeScript 类型
- 对请求和响应数据使用类型定义,提高代码可维护性和可读性。
typescript
interface User {
id: number;
name: string;
}
const users: User[] = await api.get('users').json();小结
- 使用实例统一配置,减少重复代码。
- Hooks 提供灵活拦截和处理能力。
- 分类处理错误,提高稳定性。
- 配合 TypeScript、缓存和统一解析,可构建高质量的请求层。