vue3在创建 axios.create前先调一个接口的话这代码怎么修改?

如下面代码:我还是想最后export {service},怎么把上面的代码放进一个函数里?

// 创建axios实例
const service: AxiosInstance = axios.create({
  baseURL: PATH_URL, // api 的 base_url
  timeout: config.request_timeout // 请求超时时间
})

// request拦截器
service.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    if (
      config.method === 'post' &&
      (config.headers as AxiosRequestHeaders)['Content-Type'] ==='application/x-www-form-urlencoded') {
      config.data = qs.stringify(config.data)
    }
    const token=wsCache.get(appStore.getUserInfo)?.Token;
    if(token){
      (config.headers as AxiosRequestHeaders)['Authorization'] = token
    }

    // ;(config.headers as AxiosRequestHeaders)['Token'] = 'test test'
    // get参数编码
    if (config.method === 'get' && config.params) {
      let url = config.url as string
      url += '?'
      const keys = Object.keys(config.params)
      for (const key of keys) {
        if (config.params[key] !== void 0 && config.params[key] !== null) {
          url += `${key}=${encodeURIComponent(config.params[key])}&`
        }
      }
      url = url.substring(0, url.length - 1)
      config.params = {}
      config.url = url
    }
    return config
  },
  (error: AxiosError) => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
  }
)

// response 拦截器
service.interceptors.response.use(
  (response: AxiosResponse<any>) => {
    if (response.config.responseType === 'blob') {
      // 如果是文件流,直接过
      return response
    } else if (response.data.code === result_code) {
      return response.data
    } else {
      //ElMessage.error(response.data.msg)
      return response.data
    }
  },
  (error: AxiosError) => {
    console.log('err' + error) // for debug
    //ElMessage.error(error.message)
    return Promise.reject(error)
  }
)


export { service }
阅读 1.5k
2 个回答

你要是说实在捉摸不透,你可以考虑写一个 async getService ,这样你就能在用 service 的时候先去做你想做的事情了。

或者说你对直接基于 axios 实现一套也可以。

export 不可能是异步的

直接先发需要的接口就行了用:

async function fn () {
  await axios.get(url, {
      responseType: "blob", 
      //服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream',默认是'json'
      headers:{
        'X-Auth-Token':UserModule.token
      }
  })

    const server = ......

return     server
}

const server = fn ()
export { server }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题