请求

1、axios

axios是一个基于promise的网络请求库,可以用于浏览器和node.js。

官网地址:https://www.axios-http.cn/。具体使用可以登录官网看文档,简单使用如下。

其他使用文档的地址:http://www.axios-js.com/zh-cn/docs/#axios-create-config,感觉这个在用例上更加详细。

首先需要下载安装axios或者使用使用在线的cdn,官方文档有详细操作

下载好后,如果我们需要使用要引入(项目中是import这个实例,单页开发js导入下载的包)。使用起来也非常简单,还支持自定义axios实例。直接在实例后面.get或.post发送请求,里面第一个参数对象是请求的url地址,第二个参数对象是请求携带参数,get和post携带参数的写法不用具体看下面示例。.then拿到返回结果并执行其他操作,也可以直接赋值给其他变量拿到返回结果。可以用.catch拿到错误信息。具体详细使用看官方文档,下面写一个简单示例。

import axios from 'axios'
const res = axios.post('url地址',{
    'username':'张三',
    'password':'123456'
})
const res = axios.get('url地址',{
    params:{
        'username':'张三',
        'password':'123456'
    }
})

可以自定义一个请求:在请求创建的时候往里面放一些基础参数,如基础地址、超时时间等;可以设置请求拦截器,在里面可以放一些配置,如给请求头加一些参数,请求拦截器的第一个参数位置是设置一些配置,第二个参数位置是捕获请求异常并处理;可以设置响应拦截器,和请求拦截器类似,参数第一位处理响应的信息,第二位捕获异常并处理。请求错误是客户端到服务器的错误,如请求找不到服务器,响应错误是服务器到客户端错误,如200、300、400、500错误。

自定义请求实例如下,这个实例涉及的用法还是挺全的。里面有按需导出,和默认导出并不冲突。使用element-plus的插件提示错误信息,需要注意的是全局设置了element-plus按需导入的插件仅对.vue文件生效,.js文件还是需要导入的。

import axios from 'axios'
import { useUserStore } from '@/stores/user.js'
import { ElMessage } from 'element-plus'
import router from '@/router'
const baseURL = 'http://big-event-vue-api-t.itheima.net'

const instance = axios.create({
  // TODO 1. 基础地址,超时时间
  baseURL,
  timeout: 10000
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // TODO 2. 携带token
    const useStore = useUserStore()
    if (useStore.token) {
      config.headers.Authorization = useStore.token
    }
    return config
  },
  (err) => Promise.reject(err)
)

// 响应拦截器
instance.interceptors.response.use(
  (res) => {
    // TODO 4. 摘取核心响应数据
    if (res.data.code === 0) {
      return res
    }
    // TODO 3. 处理业务失败
    // 处理业务失败, 给错误提示,抛出错误
    ElMessage.error(res.data.message || '服务异常')
    return Promise.reject(res.data)
  },
  (err) => {
    // TODO 5. 处理401错误
    // 错误的特殊情况 => 401 权限不足 或 token 过期 => 拦截到登录
    if (err.response?.status === 401) {
      router.push('/login')
    }

    // 错误的默认情况 => 只要给提示
    ElMessage.error(err.response.data.message || '服务异常')
    return Promise.reject(err)
  }
)

export default instance
export { baseURL }
View Code

对定义好的请求使用起来也是非常方便,导入,然后使用就行了。也可以将请求再封装一层,封装成函数调用。下面演示一下直接使用

import request from '@/utils/request.js'
const res = await request.get('/my/userinfo')

 

posted @ 2023-09-23 15:20  数星观月  阅读(41)  评论(0编辑  收藏  举报