edu/app/src/utils/request/index.ts

89 lines
2.7 KiB
TypeScript
Raw Normal View History

2022-08-26 09:52:43 +00:00
import HttpRequest from './http'
import { merge } from 'lodash-es'
import { HttpRequestOptions, RequestHooks } from './type'
import { getToken } from '../auth'
import { RequestCodeEnum } from '@/enums/requestEnums'
const requestHooks: RequestHooks = {
requestInterceptorsHook(options, config) {
const { urlPrefix, baseUrl, withToken } = config
options.header = options.header ?? {}
if (urlPrefix) {
options.url = `${urlPrefix}${options.url}`
}
if (baseUrl) {
options.url = `${baseUrl}${options.url}`
}
// 添加token
if (withToken) {
const token = getToken()
options.header.token = token
}
return options
},
responseInterceptorsHook(response, config) {
const { isTransformResponse, isReturnDefaultResponse } = config
//返回默认响应,当需要获取响应头及其他数据时可使用
if (isReturnDefaultResponse) {
return response
}
// 是否需要对数据进行处理
if (!isTransformResponse) {
return response.data
}
2022-09-07 12:58:01 +00:00
console.log(response.data)
2022-08-26 09:52:43 +00:00
const { code, data, msg } = response.data as any
switch (code) {
case RequestCodeEnum.SUCCESS:
return data
case RequestCodeEnum.PARAMS_TYPE_ERROR:
case RequestCodeEnum.PARAMS_VALID_ERROR:
case RequestCodeEnum.REQUEST_METHOD_ERROR:
case RequestCodeEnum.ASSERT_ARGUMENT_ERROR:
case RequestCodeEnum.ASSERT_MYBATIS_ERROR:
case RequestCodeEnum.LOGIN_ACCOUNT_ERROR:
case RequestCodeEnum.LOGIN_DISABLE_ERROR:
case RequestCodeEnum.NO_PERMISSTION:
case RequestCodeEnum.FAILED:
case RequestCodeEnum.SYSTEM_ERROR:
2022-09-07 12:58:01 +00:00
uni.$u.toast(msg)
return Promise.reject(msg)
2022-08-26 09:52:43 +00:00
case RequestCodeEnum.TOKEN_INVALID:
case RequestCodeEnum.TOKEN_EMPTY:
return Promise.reject()
default:
return data
}
}
}
const defaultOptions: HttpRequestOptions = {
requestOptions: {
timeout: 10 * 1000
},
2022-09-07 12:58:01 +00:00
baseUrl: import.meta.env.VITE_APP_BASE_URL,
2022-08-26 09:52:43 +00:00
//是否返回默认的响应
isReturnDefaultResponse: false,
// 需要对返回数据进行处理
isTransformResponse: true,
// 接口拼接地址
2022-09-07 12:58:01 +00:00
urlPrefix: 'api',
2022-08-26 09:52:43 +00:00
// 忽略重复请求
ignoreCancel: false,
// 是否携带token
withToken: true,
requestHooks: requestHooks
}
function createRequest(opt?: HttpRequestOptions) {
return new HttpRequest(
// 深度合并
merge(defaultOptions, opt || {})
)
}
const request = createRequest()
export default request