"use strict";(self.webpackChunkfes_js=self.webpackChunkfes_js||[]).push([[919],{2121:(n,s,a)=>{a.r(s),a.d(s,{data:()=>p});const p={key:"v-41dee210",path:"/reference/plugin/plugins/request.html",title:"@fesjs/plugin-request",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:2,title:"启用方式",slug:"启用方式",children:[]},{level:2,title:"配置",slug:"配置",children:[{level:3,title:"构建时配置",slug:"构建时配置",children:[]},{level:3,title:"运行时配置",slug:"运行时配置",children:[]}]},{level:2,title:"使用",slug:"使用",children:[{level:3,title:"发起一个普通 post 请求",slug:"发起一个普通-post-请求",children:[]},{level:3,title:"merge 重复请求",slug:"merge-重复请求",children:[]},{level:3,title:"请求节流(即将废弃)",slug:"请求节流-即将废弃",children:[]},{level:3,title:"请求缓存",slug:"请求缓存",children:[]},{level:3,title:"结合 use 使用",slug:"结合-use-使用",children:[]}]},{level:2,title:"API",slug:"api",children:[{level:3,title:"request",slug:"request",children:[]},{level:3,title:"useRequest",slug:"userequest",children:[]}]}],filePathRelative:"reference/plugin/plugins/request.md",git:{updatedTime:165345025e4,contributors:[{name:"wanchun",email:"445436867@qq.com",commits:1}]}}},797:(n,s,a)=>{a.r(s),a.d(s,{default:()=>d});var p=a(6252);const e=(0,p.uE)('

@fesjs/plugin-request

基于 axios 封装的 request,内置防止重复请求、请求节流、错误处理等功能。

启用方式

package.json 中引入依赖:

{\n    "dependencies": {\n        "@fesjs/fes": "^2.0.0",\n        "@fesjs/plugin-request": "^2.0.0"\n    },\n}\n
1
2
3
4
5
6

配置

构建时配置

export default {\n    request: {\n        dataField: 'result'\n    },\n}\n
1
2
3
4
5

dataField

base(即将废弃)

',12),t={class:"custom-container warning"},o=(0,p._)("p",{class:"custom-container-title"},"即将废弃",-1),c=(0,p.Uk)("这个字段将在下个版本废弃,推荐使用 "),l={href:"https://github.com/axios/axios",target:"_blank",rel:"noopener noreferrer"},r=(0,p.Uk)("axios baseURL"),u=(0,p.Uk)("。"),i=(0,p.uE)('

运行时配置

app.js 中进行运行时配置。

export const request = {\n    // 格式化 response.data (只有 response.data 类型为 object 才会调用)\n    responseDataAdaptor: (data) => {\n        data.code = data.code === '200' ? '0' : data.code;\n        return data;\n    },\n    // 关闭 response data 校验(只判断 xhr status)\n    closeResDataCheck: false,\n    // 请求拦截器\n    requestInterceptors: [],\n    // 响应拦截器\n    responseInterceptors: [],\n    // 错误处理\n    // 内部以 reponse.data.code === '0' 判断请求是否成功\n    // 若使用其他字段判断,可以使用 responseDataAdaptor 对响应数据进行格式\n    errorHandler: {\n        11199(response) {\n            // 特殊 code 处理逻辑\n        },\n        404(error) {\n        },\n        default(error) {\n            // 异常统一处理\n        }\n    },\n    // 其他 axios 配置\n    ...otherConfigs\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

skipErrorHandler

import {request} from '@fesjs/fes';\n\nrequest('/api/login', null, {\n    skipErrorHandler: '110'\n}).then((res) => {\n    // do something\n}).catch((err) => {\n    // \b这里处理 code 为 110 的异常\n    // 此时 errorHandler[110] 函数不会生效,也不会执行 errorHandler.default\n})\n
1
2
3
4
5
6
7
8
9
10

使用

发起一个普通 post 请求

import {request} from '@fesjs/fes';\n\nrequest('/api/login', {\n    username: 'robby',\n    password: '123456'\n}).then((res) => {\n    // do something\n}).catch((err) => {\n    // 处理异常\n})\n
1
2
3
4
5
6
7
8
9
10

merge 重复请求

连续发送多个请求,会被合并成一个请求,不会报 REPEAT 接口错误。

当发生 REPEAT 请求异常,并且确保自身代码合理的情况下,可以使用该配置。

import {request} from '@fesjs/fes';\n\nrequest('/api/login', {\n    username: 'robby',\n    password: '123456'\n}, {\n    mergeRequest: true, // 在一个请求没有回来前,重复发送的请求会合并成一个请求\n}).then((res) => {\n    // do something\n}).catch((err) => {\n    // 处理异常\n})\n
1
2
3
4
5
6
7
8
9
10
11
12

请求节流(即将废弃)

即将废弃

因为 request 的请求总会有一个 promise 结果,要么成功,要么失败,和防抖、节流的语义不一致,防抖、节流只是函数的不执行

请求缓存

import {request} from '@fesjs/fes';\n\nrequest('/api/login', {\n    username: 'robby',\n    password: '123456'\n}, {\n    cache: {\n        cacheType: 'ram', // ram: 内存,session: sessionStorage,local:localStorage\n        cacheTime: 1000 * 60 * 3 // 缓存时间:默认3min\n    },\n}).then((res) => {\n    // do something\n}).catch((err) => {\n    // 处理异常\n})\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

cachetrue,则默认使用 ram 缓存类型,缓存时间 3min。

结合 use 使用

import {useRequest} from '@fesjs/fes';\n\n\nexport default {\n    setup() {\n        const {loading, data, error} = useRequest('/api/login', {\n            username: 'robby',\n            password: '123456'\n        })\n\n        return {\n            loading,\n            data,\n            error\n        }\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

API

request

useRequest

request 的封装,返回响应式 loadingerrordata

',25),k={},d=(0,a(3744).Z)(k,[["render",function(n,s){const a=(0,p.up)("OutboundLink");return(0,p.wg)(),(0,p.iD)(p.HY,null,[e,(0,p._)("div",t,[o,(0,p._)("p",null,[c,(0,p._)("a",l,[r,(0,p.Wm)(a)]),u])]),i],64)}]])},3744:(n,s)=>{s.Z=(n,s)=>{const a=n.__vccOpts||n;for(const[n,p]of s)a[n]=p;return a}}}]);