在 Vue.js 中封装请求接口的 JavaScript 文件,可以使用 axios 进行 HTTP 请求。下面是一个简单的封装示例,你可以根据需求扩展功能,比如请求拦截、响应拦截、错误处理等。

安装 Axios

首先,确保你已经安装了 axios

npm install axios
  • 1.

封装 http.js

创建一个名为 http.js 的文件,用来统一处理所有的请求。

// http.js
import axios from 'axios';

const http = axios.create({
  baseURL: 'https://api.example.com/', // 基础路径,根据你的 API 地址修改
  timeout: 10000, // 请求超时设置
  headers: {
    'Content-Type': 'application/json',
  },
});

// 请求拦截器:你可以在此统一处理 token 等信息
http.interceptors.request.use(
  config => {
    // 如果有 token,可以在请求头添加 Authorization
    const token = localStorage.getItem('token'); // 假设 token 存储在 localStorage
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器:统一处理响应数据或错误
http.interceptors.response.use(
  response => {
    // 你可以在此统一处理响应数据,比如根据状态码进行处理
    if (response.data.code !== 200) {
      return Promise.reject(response.data.message || '接口错误');
    }
    return response.data; // 返回数据给调用方
  },
  error => {
    let errorMessage = '请求失败';
    if (error.response) {
      // 请求发出去并收到响应,但响应的状态码不是 2xx
      errorMessage = error.response.data.message || error.response.statusText;
    } else if (error.request) {
      // 请求发出去,但没有收到响应
      errorMessage = '网络错误或无响应';
    }
    return Promise.reject(errorMessage);
  }
);

export default http;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

如何使用封装的 HTTP 请求

在 Vue 组件中,你可以通过 import 引入 http.js 来进行 API 请求。下面是一个使用示例:

// ExampleComponent.vue
<template>
  <div>
    <h1>{{ userInfo.name }}</h1>
  </div>
</template>

<script>
import http from '@/utils/http'; // 导入封装的 http.js

export default {
  data() {
    return {
      userInfo: {}
    };
  },
  mounted() {
    this.fetchUserInfo();
  },
  methods: {
    async fetchUserInfo() {
      try {
        const data = await http.get('/user/info'); // 发送 GET 请求
        this.userInfo = data; // 请求成功,赋值数据
      } catch (error) {
        console.error('获取用户信息失败:', error);
      }
    }
  }
};
</script>

<style scoped>
/* 你的样式 */
</style>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.

常见请求方式

  1. GET 请求
http.get('/path', { params: { id: 1 } });
  • 1.
  1. POST 请求
http.post('/path', { key: 'value' });
  • 1.
  1. PUT 请求
http.put('/path', { key: 'value' });
  • 1.
  1. DELETE 请求
http.delete('/path', { data: { id: 1 } });
  • 1.

总结

通过这种方式,你可以在 Vue 项目中统一管理 HTTP 请求,处理请求拦截、响应拦截以及错误处理,同时能够灵活使用 axios 的不同请求方式。这种封装方式提高了代码的可维护性,简化了 API 请求的管理。