88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
|
|
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
|
||
|
|
}
|
||
|
|
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:
|
||
|
|
return Promise.reject(data)
|
||
|
|
|
||
|
|
case RequestCodeEnum.TOKEN_INVALID:
|
||
|
|
case RequestCodeEnum.TOKEN_EMPTY:
|
||
|
|
return Promise.reject()
|
||
|
|
|
||
|
|
default:
|
||
|
|
return data
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const defaultOptions: HttpRequestOptions = {
|
||
|
|
requestOptions: {
|
||
|
|
timeout: 10 * 1000
|
||
|
|
},
|
||
|
|
baseUrl: 'https://likeadmin-java.yixiangonline.com',
|
||
|
|
//是否返回默认的响应
|
||
|
|
isReturnDefaultResponse: false,
|
||
|
|
// 需要对返回数据进行处理
|
||
|
|
isTransformResponse: true,
|
||
|
|
// 接口拼接地址
|
||
|
|
urlPrefix: '/api',
|
||
|
|
// 忽略重复请求
|
||
|
|
ignoreCancel: false,
|
||
|
|
// 是否携带token
|
||
|
|
withToken: true,
|
||
|
|
requestHooks: requestHooks
|
||
|
|
}
|
||
|
|
|
||
|
|
function createRequest(opt?: HttpRequestOptions) {
|
||
|
|
return new HttpRequest(
|
||
|
|
// 深度合并
|
||
|
|
merge(defaultOptions, opt || {})
|
||
|
|
)
|
||
|
|
}
|
||
|
|
const request = createRequest()
|
||
|
|
export default request
|