0.1.0 • Published 1 year ago

@coderlzw/request v0.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

使用说明

import {FetchRequest} from "@coderlzw/request"

const myRequest = new FetchRequest({
    baseURL: '/api',
    timeout: 5000,  // 超时的请求会被取消
    interceptors: {
        requestInterceptor: (request) => {
            // 01、return Promise.reject("请求不会被发送,会进入requestInterceptorCatch");
            // 02、throw new Error("请求不会被发送,会进入requestInterceptorCatch");
            // 03、return request;  这里只能返回request对象,不能返回其他类型
            // 04、默认返回 request
        },
        requestInterceptorCatch: (requestCatch) => {
            // 01、throw new Error(requestCatch.message);
            // 02、return Promise.reject(requestCatch.message); 
            // 03、不允许返回其他类型、默认是 throw new Error(error.message);
        },
        responseInterceptor: (response) => {
            // 自由发挥、默认会根据响应头的content-type来判断是否需要转换数据,如果都不符合则返回response
            // application/json; charset=utf-8   ->  response.json()
            // text/html; charset=utf-8           ->  response.text()
            // image/*                        ->  response.blob()
            // application/octet-stream          ->  response.blob()
        },
        responseInterceptorCatch: (responseCatch) => {
            // 01、throw new Error(responseCatch.message);
            // 02、return Promise.reject(responseCatch.message);
            // 03、默认 throw new Error(responseCatch.message)
        }
    },
});

export default myRequest;
interface ResponseData<T = any> {
    code: number;
    data: T;
    message: string;
}

interface RequestParams {
    id: number;
}

interface RequestBody {
    name: string;
    age: number;
}

myRequest.get<ResponseData, RequestParams>('/posts', {params: {id: 1}}).then((res) => {
    console.log(res);
}).catch((err) => {
    console.log(err);
});

myRequest.post<ResponseData, RequestBody, RequestParams>('/user', {
    params: {id: 1},
    body: {
        name: "zs",
        age: 20
    }
}).then((res) => {
    console.log(res);
}).catch((err) => {
    console.log(err);
});

myRequest.fetch<ResponseData, RequestParams, RequestBody>("/posts111?id=1", {
    method: "POST",
    params: {
        name: "zhangsan"
    },
    body: {
        name: "zhangsan"
    }
}).then((res) => {
    console.log(res);
}).catch((err) => {
    console.log("FETCH_ERROR=============:", err);
});

文件下载

myRequest.fetch<Uint8Array>("/installer/XELive3.6.0.1-X64.exe", {
    onProgress(progress) {
        console.log("下载进度:", progress);
    },
}).then((res) => {
    const a = document.createElement("a");
    a.href = URL.createObjectURL(new Blob([res]));
    a.download = "XELive3.6.0.1-X64.exe";
    a.click();
}).catch((err) => {
    console.log("请求失败", err)
})

如果不传递onProgress,则返回Blob类型的数据

myRequest.fetch<Blob>("/installer/XELive3.6.0.1-X64.exe", {}).then((res) => {
    const a = document.createElement("a");
    a.href = URL.createObjectURL(res);
    a.download = "XELive3.6.0.1-X64.exe";
    a.click();
}).catch((err) => {
    console.log("请求失败", err)
})
0.1.0

1 year ago