axios库api封装

封装api的目录结构如下:

接口返回值包括状态码、说明信息、数据内容也可能是异常信息,为了避免在调用每个接口时都需要针对异常进行捕获,所以这里对ajax请求进行了封装,在ajax.js中编辑如下代码:

import axios from 'axios'
axios.defaults.baseURL = '/api'
axios.defaults.timeout =  10000

//添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 将token给到一个前后台约定好的key中,作为请求发送
  let token = '' // 获取token的方法
  if (token) {
    config.headers['Authorization'] = token
  }
  return config;
}, function (error) {
  console.log("进入request  error", error)
  return Promise.reject(error);
})

//添加响应拦截器
axios.interceptors.response.use(function (response) {
  // ajax响应拦截内容,可用于判断是否登录等业务逻辑
  return response
}, function (error) {
  return Promise.reject(error)
})

export default function ajax(url, data = {}, method = 'GET') {
  return new Promise((resolve, reject) => {
    let promise
    // 1.执行异步请求
    if (method==='GET'){
      promise = axios.get(url, {
        params: data
      })
    } else if (method==='POST'){
      promise = axios.post(url, data)
    }
    // 2.如果成功了,调用resolve
    promise.then(res => {
      // 直接获取response的data
      resolve(res.data)
    }).catch(err => {
      // 3.失败后不调用reject
      console.log(err.message)
    })
  })
}

进行接口定义是非常的简单,只需要确认访问接口的方法、接口需要传递的参数以及接口访问的地址,内容如下:

import ajax from './ajax'
export const baseUrl = 'http://localhost:8080/'
// 用户绑定
export const bindUser = (username,password) => ajax(baseUrl + 'mobile/login',{password, username}, 'POST')
// 获取地区详细信息
export const getArea = (user_id) => ajax(baseUrl + 'mobile/area', {user_id}, 'GET')

至此已经完成了接口的封装和定义,下面可以在项目中进行接口的调用了,使用方式如下:

async bindUser(){
    this.isLoading = true
    const response = await bindUser('用户名','用户密码')
    if(response.code==SUCCESS_CODE){
        // '绑定成功'
        // response.data
    } else {
        // '绑定失败'
        // response.msg
    }
}

只需要关注返回值内容,异常统一捕获

axios是一个基于Promise的HTTP客户端,用于发送HTTP请求。这里是一个简单的axios API封装示例: ```javascript import axios from 'axios'; // 创建一个axios实例 const instance = axios.create({ baseURL: 'http://api.example.com', // 设置基础URL timeout: 5000, // 请求超时时间 }); // 封装get请求 export function get(url, params) { return new Promise((resolve, reject) => { instance .get(url, { params }) .then(response => { resolve(response.data); }) .catch(error => { reject(error); }); }); } // 封装post请求 export function post(url, data) { return new Promise((resolve, reject) => { instance .post(url, data) .then(response => { resolve(response.data); }) .catch(error => { reject(error); }); }); } ``` 这个示例中,首先通过`axios.create`方法创建了一个axios实例,可以设置一些默认的配置参数,比如baseURL和timeout。 然后,我们封装了两个常用的请求方法:`get`和`post`。在这些封装的方法中,我们通过调用axios实例的对应方法来发送请求,并返回一个Promise对象。 这样,在其他地方使用封装好的axios API时,可以更加简洁地进行请求操作。例如: ```javascript import { get, post } from './api'; get('/users', { page: 1, limit: 10 }) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); post('/login', { username: 'admin', password: '123456' }) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); ``` 这样做的好处是,可以在项目中统一处理请求的配置和错误处理,提高代码的可维护性和复用性。同时,也方便了后续对axios的升级和配置调整。当然,具体的封装方式还可以根据实际需要进行更多的扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值