useAxios
提供二次封装的请求模块,自动带上 App 接口需要的请求头信息,以及优化请求返回的内容。
TIP
核心类的所有方法涉及到的请求都基于本实例。
axios
结合内部业务进行二次封装的 Axios 方法:
- 如果请求的 URL 以
/devapi
开头,会认为是业务请求,自动根据部署的域名切换不同环境的baseURL
,减少生产事故 - 业务请求支持在
headers
自动带上Authorization
凭证 - 响应更改为
Promise.resolve(res.data)
,减少一级data
。
- Supported Platforms:
Browser | Electron | App | Server | Scriptlet |
- Type Declarations:
ts
/**
* 本身是一个 Axios 实例
* @description 和默认的 Axios 实例一致
*/
import('axios').AxiosInstance
/**
* 接口响应类型
* @description 配套我们内部接口的响应格式定制的类型
*/
interface ResponseType {
code: number
data: any
msg: string
}
- Example:
ts
import { useAxios } from '@lunarxyz/core'
import type { ResponseType } from '@lunarxyz/core'
const { axios } = useAxios()
async function run() {
// 发起请求
const res = (await axios({
method: 'post',
url: '/devapi/member/appversion/list',
data: {
adChannel: 'dev',
platform: 'android',
},
})) as unknown as ResponseType
}
run().catch((e) => {
console.log(e)
})
isOk
业务请求可以通过这个方法判断接口请求是否成功(指内部状态的成功或者失败,非 HTTP 状态)。
- Supported Platforms:
Browser | Electron | App | Server | Scriptlet |
- Type Declarations:
ts
declare function isOk(
/**
* 接口响应类型
*/
res: ResponseType
): boolean
- Example:
ts
import { useAxios } from '@lunarxyz/core'
import type { ResponseType } from '@lunarxyz/core'
const { axios, isOk } = useAxios()
async function run() {
// 发起请求
const res = (await axios({
method: 'post',
url: '/devapi/member/appversion/list',
data: {
adChannel: 'dev',
platform: 'android',
},
})) as unknown as ResponseType
// 可以通过这个方法判断请求是否成功
if (!isOk(res)) return
console.log(res)
}
run().catch((e) => {
console.log(e)
})
customBaseUrl
自定义 baseUrl ,手动指定后,以 /devapi
开头的请求会转发到该域名(例如本地接口),仅在开发环境下生效。
TIP
一般情况下只需要在入口文件( App.vue
/ main.ts
)里面调用一次即可完成注册,无需多次调用。
- Supported Platforms:
Browser | Electron | App | Server | Scriptlet |
- Type Declarations:
ts
/**
* 本身是一个 Vue Ref 变量
*/
import('vue').Ref<CustomBaseUrl>
/**
* Ref 是基于 CustomBaseUrl 类型
* 必须是一个有效的网址格式,结尾不需要带 `/`
*/
type CustomBaseUrl = Url | ''
type Url<T extends string> = `http://${T}` | `https://${T}`
- Example:
ts
import { ref } from 'vue'
import { useAuth, useSMS, useAxios } from '@lunarxyz/core'
async function run() {
/**
* 指定自定义 baseUrl
*/
const { customBaseUrl } = useAxios()
customBaseUrl.value = 'https://example.com'
/**
* 之后所有的默认请求都会转发到 `https://example.com`
*/
const phoneNumber = ref<string>('13800138000')
const { sendCode } = useSMS()
await sendCode('login', phoneNumber.value)
}
run().catch((e) => {
console.log(e)
})