在vue中使用axios的步骤(保姆级)

一、基础用法

1.安装axios

npm i axios

2.引入axios

// 引入axios
import axios from 'axios'

3使用

      // 发起一个post请求
axios({
  method: 'post',
  url: 'http://192.168.0.88:8888/api/private/v1/login',
  data: {
    username: 'admin',
    password: '123456'
  }
});

二、进阶用法

根据某些配置项将公共的部分封装起来重复利用

1.准备封装文件

创建一个request.js 的文件用来存放封装的内容

// 引入axios
import axios from "axios";
// 1.准备baseurl
let baseUrl = "";
// 2.创建新的axios实例  service
const service = axios.create({
  baseURL: baseUrl,
  // 超时时间
  timeout: 2000,
  headers: { "X-Custom-Header": "foobar" },
});
//   3.添加请求拦截器
// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么.
    config.headers.Authorization = localStorage.getItem("cms-token");
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);
// 4.添加响应拦截器
// 添加响应拦截器
service.interceptors.response.use(
  (response) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // 手动清除 Toast

    return response.data;
  },
  (error) => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么

    return Promise.reject(error);
  }
);
// 5.向外抛出实例对象
export default service

2.直接使用

//先引入
import request from '../utils/request'

//使用
request({
        url:'/login',
        data:{
          username: 'admin',
          password: '123456'
        }
      })

3.通过api管理的方式进行使用

3.1 创建api文件夹用来统一管理接口

建议api中的文件对应view中的文件目录

3.2 创建对应的js文件

//先引入
import request from '../utils/request'

// 向外暴露封装的请求结果

export const Login = (data)=>{
    // 以返回值的形式将请求结果返回出去
    return request({
        url:'/login',
          data:{
            username: 'admin',
            password: '123456'
          }
    })

}

注意:get请求的时候要通过params进行传值

export const GetList = (params)=>{
    // 以返回值的形式将请求结果返回出去
    return request({
        url:'/users',
        method:'get',
        params
    })

}

3.3使用方式

在要使用的vue文件中引入api文件夹中对应的js文件,通过结构赋值的方式获取文件中的方法

import { Login } from '../api/user'

// 在对应的方法中使用
  Login()

3.4处理返回值

axios 返回的是Promise格式的数据我们可以通过async / awite 进行数据处理

 async login(){
      // 在对应的方法中使用 谁调用谁传值
     let {data,meta} = await Login({
            username: 'admin',
            password: '123456'
          });
          console.log(data,meta);

    }  

3.5拿到的值就可以赋值给data中

  async login(){
      // 在对应的方法中使用 谁调用谁传值
     let {data,meta} = await Login({
            username: 'admin',
            password: '123456'
          });
          // 将获取到的值传递给data中
          this.token = data.token
    }

配置代理

devServer: {
    host: 'localhost',//本地地址
    port: '8080',//端口号
    hot: true,//热更新自动刷新
    open: true,//自动打开
    overlay: {  //当出现编译错误或警告时,在浏览器中显示全屏覆盖。只显示错误信息不提示警告情况限制是
      warning: false,
      error: true
    },
    proxy: {
      "/api": {
        target: 'http://192.168.0.88:8888/api/private/v1',//代理地址 凡是使用/api
        changeOrigin: true,//允许跨域请求
        secure: false,
        pathRewrite: { //重写路径 替换请求地址中的指定路径
          ['^/api']: '/' //将请求地址中的api替换为空
        }
      }
    }
  }
posted @ 2023-05-05 11:27  李笑吅  阅读(2185)  评论(0编辑  收藏  举报