axios是什么?如何在项目中使用?

Axios 是一个基于 Promise 的 HTTP 库,适用于浏览器和 Node.js。它提供了丰富的特性,如拦截器、自动转换 JSON 数据等。在 Vue 项目中,通常在 src/utils 请求模块创建 Axios 实例,并配置请求和响应拦截器,处理 token 及错误。然后在 src/api 接口文件中导入 Axios 实例进行具体接口的请求操作,如登录、获取用户信息等。
摘要由CSDN通过智能技术生成

什么是 axios?

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

特性
-从浏览器中创建 XMLHttpRequests
-从 node.js 创建 http 请求
-支持 Promise API
-拦截请求和响应
-转换请求数据和响应数据
-取消请求
-自动转换 JSON 数据
-客户端支持防御 XSRF

安装

使用 npm:

$ npm install axios

使用 bower:

$ bower install axios

使用 cdn:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

在项目中使用

引入axios到
src\utils\request.js

import axios from 'axios'

import store from '@/store'

// // create an axios instance
// 创建一个axios实例
const service = axios.create({
  // baseURL: 'http://ihrm-java.itheima.net', // 设置axios请求的基础的基础地址
  baseURL: process.env.VUE_APP_BASE_API, // 从环境变量设置基地址
  timeout: 5000 // 定义5秒超时
})

// 响应拦截器
service.interceptors.response.use(response => {
  if (response.data.success) {
    // 操作成功
    return response.data
  } else {
    // 如果success为false 业务出错,直接触发reject
    // 被catch分支捕获
    return Promise.reject(new Error('请求失败'))
  }
}, async error => {
  console.log('请求出错啦', error)
  if (error.response.data.code === 10002) {
    // 这个表示token失效的10002是和后端商量好的 并不是http默认的
    console.log('token失效')
    // 如果响应回来的code=10002 调用actions中的user模块中的logout方法
    await store.dispatch('user/logout')
    // .vue -- this.$route.fullPath
    //  .js -- router.currentRoute.fullPath

    // router.push('/login?return_url=' + encodeURIComponent(router.currentRoute.fullPath))
  }
  // 如果有错误 打印出来错误
  console.dir(error)
  console.log(error)
  return Promise.reject(error)// 返回执行错误 让当前的执行链跳出成功 直接进入 catch
})

// 请求拦截器
service.interceptors.request.use(config => {
  // 从vuex中拿到保存的token
  const token = store.state.user.token
  if (token) {
    // 如果token存在 请求头里加上'Authorization'
    config.headers['Authorization'] = `Bearer ${token}`
  }
  return config
}, error => {
  // 如果请求有错误 打印出错误
  console.log(error)
  // 返回执行错误 让当前的执行链跳出成功 直接进入catch
  return Promise.reject(error)
})
// 最后一定要导出axios实例
export default service

引入axios实例到
src\api\user.js (这个实例的名字是可以修改的,不一定要与上面的实例一致)

import request from '@/utils/request'

/**
 * 登录请求
 * @param {mobile,password} data
 * @returns
 */
export function login(data) {
  return request({
    url: '/sys/login',
    method: 'post',
    data
  })
}

// 请求用户信息
export function getProfile() {
  return request({
    url: '/sys/profile',
    method: 'post'
  })
}

// 请求用户头像
export function getUserDetailById(id) {
  return request({
    url: `/sys/user/${id}`,
    method: 'get'
  })
}


项目中一般来说都是默认在src/api中写接口发请求,并且api里的请求.js文件也是分模块的,比如user.js里只包含用户信息请求,permisssion.js里只包含权限信息请求,department.js里只包含部门信息请求。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值