注:别忘记安装axios
在实际的项目实战中如果我们不对接口加以管理,整篇看着就很乱,这个时候我们就要用到接口封装了。
废话不多说直接上代码!!!
首先是request.js
- import axios from "axios";
-
- // 使用环境变量来设置基础URL
- const baseURL = process.env.VUE_APP_API_BASE_URL || "接口前缀http://xxxxxxxxxxxxxx";
-
- const service = axios.create({
- baseURL: baseURL,
- timeout: 5000,
- headers: {
- "Content-type": "application/json;charset=utf-8"
- }
- });
-
- service.interceptors.request.use(config => {
- const token = localStorage.getItem("token");
- if (token) {
- config.headers['Authorization'] = 'Bearer ' + token;
- }
- return config;
- }, error => {
- console.error("Request error: ", error);
- return Promise.reject(error);
- });
-
- service.interceptors.response.use(response => {
- if (response.status === 200) {
- return response.data;
- } else {
- // 可以根据需要添加更多的错误处理
- console.error("Response error: ", response);
- return Promise.reject(new Error("Error with status code " + response.status));
- }
- }, error => {
- // 对常见的HTTP错误进行处理
- if (error.response) {
- // 请求已发出,服务器回复状态码不在2xx范围
- console.error("Error status: ", error.response.status);
- // 根据返回的状态码进行不同的处理
- // 例如: if (error.response.status === 401) { // 处理登录过期 }
- } else {
- // 服务器连回应都没有返回
- console.error("Network error: ", error);
- }
- return Promise.reject(error);
- });
-
- export default service;
其次api.js
- // 我要用到的一些接口
- import service from "@/request/index";
- // 引入接口
- // 如果在 JavaScript 中引入接口不需要进行类型标注
- // import { ILoginData } from "@/type/login";
-
- // 登录接口
- export function index(data) {
- return service({
- url: "/index/index",
- method: "POST",
- data: data
- });
- }
- export function index(queryParams) {
- return service({
- url: "/index/index",
- method: "GET",
- params: queryParams
- });
- }
方法很多就看用那一些了,前面两种是基础格式,这个方法进行了一些简单的配置,调用和前面一样。
- export function index(data) {
- // 创建一个FormData实例
- const formData = new FormData();
-
- // 假设data对象是这样的:{ username: 'user1', password: 'pass', file: FileObject }
- // 你可以循环遍历data对象,并添加到formData中
- for (const key in data) {
- formData.append(key, data[key]);
- }
-
- // 发送multipart/form-data请求
- return service({
- url: "/mobile/login",
- method: "POST",
- data: formData,
- headers: {
- 'Content-Type': 'multipart/form-data'
- }
- });
- }
然后home.vue
到这里就非常简单了,直接import引入相应的名称在使用就可以了
- <template>
- <div>
- <div @click="inds">加载数据</div>
-
- </div>
- </template>
-
- <script setup>
- import { ref } from 'vue';
- import { index } from "@/request/api";
-
-
-
- const inds = async () => {
- try {
- const res = await index();
- console.log(1, res);
- } catch (err) {
- console.error(2, err);
-
- } finally {
- console.log(3);
- }
- };
- </script>
最后封装接口请求数据
首页不需要参数,可以直接请求,那么需要参数的怎么办呢?有方法
这两种方法都行没什么不一样的
- <script setup>
- import { ref } from 'vue';
- import { index } from "@/request/api";
-
-
-
- const inds = async () => {
- try {
- let id = 1119;//比如接口需要id就声明id,如果是name就写name
- const res = await index({id});
- console.log(1, res);
- } catch (err) {
- console.error("失败", err);
-
- }
- };
- </script>
- <script setup>
- import { ref } from 'vue';
- import { index } from "@/request/api";
-
-
-
- const inds = async () => {
- try {
- const res = await index({id:1119});
- console.log(1, res);
- } catch (err) {
- console.error("失败", err);
-
- }
- };
- </script>
到这里就结束了感谢观看,有疑问可以在评论区写出来。