generated fromwinjs-dev/winjs-plugin-template
- Notifications
You must be signed in to change notification settings - Fork0
The HTTP request plug-in of WinJS framework is based on axios and vue-hooks-plus, providing strong request processing capabilities and Vue 3 Composition API support.
License
NotificationsYou must be signed in to change notification settings
winjs-dev/winjs-plugin-request
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
WinJS 框架的 HTTP 请求插件,基于 axios 和 vue-hooks-plus,提供了强大的请求处理能力和 Vue 3 Composition API 支持。
- 🚀 基于 axios 的强大 HTTP 请求功能
- 📦 开箱即用的 Vue 3
useRequesthooks - 🔧 灵活的请求/响应拦截器配置
- 🛡️ 完善的错误处理机制
- 📝 完整的 TypeScript 类型定义
- ⚙️ 可配置的数据字段提取
- 🎯 支持 Vue 2 和 Vue 3 双版本
npm install @winner-fed/plugin-request# 或者yarn add @winner-fed/plugin-request# 或者pnpm add @winner-fed/plugin-request
import{defineConfig}from'win';exportdefaultdefineConfig({plugins:['@winner-fed/plugin-request'],request:{dataField:'data'// 可选,默认为 'data',设置为 '' 则不提取数据字段}});
import{RequestConfig}from'winjs';exportconstrequest:RequestConfig={timeout:10000,baseURL:'https://api.example.com',// 请求拦截器requestInterceptors:[[(config)=>{// 添加认证 tokenconfig.headers.Authorization=`Bearer${getToken()}`;returnconfig;},(error)=>{console.error('请求拦截器错误:',error);returnPromise.reject(error);}]],// 响应拦截器responseInterceptors:[[(response)=>{// 处理响应数据if(response.data.code===200){returnresponse;}thrownewError(response.data.message);},(error)=>{console.error('响应拦截器错误:',error);returnPromise.reject(error);}]],// 错误处理配置errorConfig:{errorHandler:(error,opts)=>{console.error('全局错误处理:',error);// 自定义错误处理逻辑},errorThrower:(res)=>{if(res.success===false){thrownewError(res.message||'请求失败');}}}};
import{request}from'winjs';// 基本用法constdata=awaitrequest('/api/users');// 带参数的 POST 请求constresult=awaitrequest('/api/users',{method:'POST',data:{name:'John',age:30}});// 获取完整响应constresponse=awaitrequest('/api/users',{getResponse:true});// 单次请求拦截器constdata=awaitrequest('/api/users',{requestInterceptors:[(config)=>{config.headers['X-Custom-Header']='value';returnconfig;}]});
<template> <div> <divv-if="loading">加载中...</div> <divv-else-if="error">错误: {{ error.message }}</div> <divv-else> <h1>用户列表</h1> <ul> <liv-for="user in data":key="user.id"> {{ user.name }} </li> </ul> </div> <button@click="refresh">刷新</button> </div></template><script setup>import {useRequest }from'winjs';// 基本用法const {data,loading,error,refresh }=useRequest(()=> {returnrequest('/api/users');});// 带参数的请求const { data:userData, loading:userLoading }=useRequest( (userId)=>request(`/api/users/${userId}`), { manual:true,// 手动触发onSuccess: (data)=> {console.log('请求成功:', data); },onError: (error)=> {console.error('请求失败:', error); } });// 触发带参数的请求constfetchUser= (id)=> {userData.run(id);};</script>
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
dataField | string | 'data' | 响应数据字段名,设置为'' 则不提取数据字段 |
interfaceRequestConfigextendsAxiosRequestConfig{errorConfig?:{errorHandler?:(error:RequestError,opts:RequestOptions)=>void;errorThrower?:(res:any)=>void;};requestInterceptors?:RequestInterceptorTuple[];responseInterceptors?:ResponseInterceptorTuple[];}
发送 HTTP 请求的核心方法。
url:string- 请求 URLoptions:RequestOptions- 请求配置选项
Promise<T>- 响应数据 (默认)Promise<AxiosResponse<T>>- 完整响应 (当getResponse: true时)
// 基本 GET 请求constusers=awaitrequest('/api/users');// POST 请求constuser=awaitrequest('/api/users',{method:'POST',data:{name:'John',email:'john@example.com'}});// 获取完整响应constresponse=awaitrequest('/api/users',{getResponse:true});
Vue 3 Composition API Hook,用于管理异步请求状态。
service:(...args: any[]) => Promise<any>- 请求服务函数options:UseRequestOptions- Hook 配置选项
interfaceUseRequestResult{data:Ref<T>;loading:Ref<boolean>;error:Ref<Error|null>;run:(...args:any[])=>Promise<T>;runAsync:(...args:any[])=>Promise<T>;refresh:()=>Promise<T>;mutate:(data:T)=>void;cancel:()=>void;}
const{ data, loading, error, run, refresh}=useRequest((keyword)=>request(`/api/search?q=${keyword}`),{manual:true,debounceWait:300,onSuccess:(data)=>{console.log('搜索成功:',data);}});
获取 axios 实例,用于更高级的定制。
AxiosInstance- 配置好的 axios 实例
import{getRequestInstance}from'winjs';constaxiosInstance=getRequestInstance();// 使用 axios 实例constresponse=awaitaxiosInstance.get('/api/users');
constrequestInterceptor:RequestInterceptorTuple=[(config)=>{// 修改请求配置config.headers.Authorization=`Bearer${token}`;returnconfig;},(error)=>{// 处理请求错误returnPromise.reject(error);}];
constresponseInterceptor:ResponseInterceptorTuple=[(response)=>{// 处理响应数据if(response.data.code===200){returnresponse;}thrownewError(response.data.message);},(error)=>{// 处理响应错误returnPromise.reject(error);}];
exportconstrequest:RequestConfig={errorConfig:{errorHandler:(error,opts)=>{if(error.response?.status===401){// 处理未授权错误redirectToLogin();}elseif(error.response?.status===500){// 处理服务器错误showErrorMessage('服务器错误,请稍后重试');}}}};
try{constdata=awaitrequest('/api/users');}catch(error){if(error.response?.status===404){console.log('用户不存在');}else{console.error('请求失败:',error);}}
插件提供了完整的 TypeScript 类型定义:
importtype{RequestConfig,RequestOptions,RequestError,RequestInterceptor,ResponseInterceptor,ErrorInterceptor}from'winjs';
MIT.
About
The HTTP request plug-in of WinJS framework is based on axios and vue-hooks-plus, providing strong request processing capabilities and Vue 3 Composition API support.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Contributors2
Uh oh!
There was an error while loading.Please reload this page.