Skip to content
Navigation

useAxios

提供二次封装的请求模块,自动带上 App 接口需要的请求头信息,以及优化请求返回的内容。

TIP

核心类的所有方法涉及到的请求都基于本实例。

axios

结合内部业务进行二次封装的 Axios 方法:

  1. 如果请求的 URL 以 /devapi 开头,会认为是业务请求,自动根据部署的域名切换不同环境的 baseURL ,减少生产事故
  2. 业务请求支持在 headers 自动带上 Authorization 凭证
  3. 响应更改为 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)
})

Released under the MIT License.