下面我们将使用 TypeScript 创建一个简化版的 Axios 库。Axios 是一个流行的 HTTP 客户端库,它允许开发者轻松地发送请求并处理响应。我们将实现基本的 GET 和 POST 请求功能。
1. 项目初始化
首先,创建一个新的项目文件夹并初始化一个 Node.js 项目:
代码语言:txt复制mkdir my-axios
cd my-axios
npm init -y
然后,安装 TypeScript 及其类型定义:
代码语言:txt复制npm install typescript --save-dev
npx tsc --init
接下来,安装 Axios 作为依赖(可选,仅用于测试):
代码语言:txt复制npm install axios
2. 创建 Axios 类
在项目根目录下,创建一个 src
文件夹,并在其中创建一个名为 MyAxios.ts
的文件。我们将开始实现 Axios 类的基本结构。
// src/MyAxios.ts
export class MyAxios {
constructor() {}
// ... 这里将添加请求方法
}
3. 实现 GET 请求
接下来,我们将在 MyAxios
类中实现一个简单的 GET 请求方法。
import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
export class MyAxios {
constructor() {}
async get<T>(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse<T>> {
try {
const response = await axios.get<T>(url, config);
return response;
} catch (error) {
throw this.handleError(error);
}
}
private handleError(error: any): Error {
// 处理错误
if (axios.isAxiosError(error)) {
return new Error(error.message);
}
return new Error('Unknown error');
}
}
4. 实现 POST 请求
接下来,我们添加一个 POST 请求的方法。
代码语言:txt复制async post<T>(url: string, data: any, config?: AxiosRequestConfig): Promise<AxiosResponse<T>> {
try {
const response = await axios.post<T>(url, data, config);
return response;
} catch (error) {
throw this.handleError(error);
}
}
将完整类更新为:
代码语言:txt复制import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
export class MyAxios {
constructor() {}
async get<T>(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse<T>> {
try {
const response = await axios.get<T>(url, config);
return response;
} catch (error) {
throw this.handleError(error);
}
}
async post<T>(url: string, data: any, config?: AxiosRequestConfig): Promise<AxiosResponse<T>> {
try {
const response = await axios.post<T>(url, data, config);
return response;
} catch (error) {
throw this.handleError(error);
}
}
private handleError(error: any): Error {
if (axios.isAxiosError(error)) {
return new Error(error.message);
}
return new Error('Unknown error');
}
}
5. 错误处理
我们在 handleError
方法中进行了简单的错误处理。如果请求失败,我们会返回一个包含错误消息的 Error
对象。
6. 测试我们的库
在 src
文件夹下创建一个 index.ts
文件,用于测试我们的库。
// src/index.ts
import { MyAxios } from './MyAxios';
const myAxios = new MyAxios();
async function test() {
try {
const response = await myAxios.get('https://jsonplaceholder.typicode.com/posts');
console.log(response.data);
const postResponse = await myAxios.post('https://jsonplaceholder.typicode.com/posts', {
title: 'foo',
body: 'bar',
userId: 1,
});
console.log(postResponse.data);
} catch (error) {
console.error(error);
}
}
test();
编译与运行
最后,在项目根目录下编译 TypeScript 代码并运行:
代码语言:txt复制npx tsc
node dist/index.js
你应该能看到来自 JSONPlaceholder 的 GET 和 POST 请求的输出。