vue 重学笔记四:请求 axios & fetch 配置

  上一篇笔记介绍了 入口 相关的内容,既然入口找到了,也知道 是 如何实现的了,今天这篇文章就来说下 请求 相关的内容。

  目前项目中常用的 请求库是 axios 和 fetch。它们两者的区别,可以看下 《axios、fetch 和 Ajax 等的区别详解》一文。既然知道了区别,那今天就来看看实际的操作步骤吧。此文操作中 使用的 技术栈是 : vue3 +  vuex + less。

 

  前提步骤:先在 src 中 新建 api 文件夹,文件夹中 新建 http.js 文件 (请求配置) 和 index.js 文件 (请求接口)

 

axios

 1、安装

npm install axios --save

  

2、src/api/http.js 文件中

import axios from "axios";

const token = "bb3e87s4-9093-41fd-86e6-87d126641ebf1";

// 统一配置
const options = {
  baseURL: "",
  timeout: 60000, // 请求超时时间毫秒
  //withCredentails选项表明了是否是跨域请求
  withCredentials: true, //default: false
  responseType: "json", //default
  headers: {
    // 设置后端需要的传参类型
    Authentication: token,
  },
};

// 创建实例
let instance = axios.create(options);

// 请求拦截
instance.interceptors.request.use(
  (options) => {
    return options;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截
instance.interceptors.response.use(
  (response) => {
    const data = response.data;
    return data;
  },
  (error) => {
    return Promise.reject(error);
  }
);

export default instance

  

3、在 src/api 中 新建一个 index.js ,这里的名字可随意

import axios from "./http";

export const getApi = (params) => axios.get("http://10.21.11.100:8080/test", params);
// 这里是 随便写的一个 api 地址,在真实开发时需要配置 真实的地址

 

4、在 组件中引用

// helloWorld.vue

<script setup>
    import {getApi} from "../api/index";

    const handleApi = async () =>{
      let res = await getApi()
    }
</script>

<template>
    <button type="button" @click="handleApi">按钮</button>
</template>

到这一步可以发现,接口是可以调用了,但是会报错。报错信息如下:

 

 

 可以看出来,提示 跨域 的问题。

这时候就可以通过 设置代理来解决跨域的问题。

1) 首先将 src/api/index.js 中的 api 地址改为如下:

import axios from "./http";

export const getApi = (params) => axios.get("/test", params);

2) 修改项目根目录下的 vite.config.js 文件(vite 创建的项目,vite.config.js 其实就相当于 vue.config.js 了),在其中添加 代理,代码如下:

vite的配置可以去官网查询:https://www.vitejs.net/guide/why.html

import { defineConfig } from "vite";
import { resolve } from "path";
import vue from "@vitejs/plugin-vue";

/**
 * vite 版本 2.9.9
 * 官网地址 https://vitejs.dev/config/
 */

function pathResolve(dir) {
  return resolve(__dirname, ".", dir);
}

export default defineConfig({
  base: "",
  plugins: [vue()], // 配置需要使用的插件列表,这里将 vue 添加进去
  // 配置文件别名 vite1.0 是/@/    2.0改为/@
  // 这里是将 src 目录配置别名为 /@ 方便在项目中导入 src 目录下的文件
  resolve: {
    alias: {
      "/@": pathResolve("src"),
    },
  },
  // 强制预构建插件包
  optimizeDeps: {
    include: ["axios"],
  },
  // 打包配置
  build: {
    target: "modules",
    outDir: "dist", // 指定输出路径
    assetsDir: "assets", // 指定生成静态资源的存放路径
    minify: "terser", // 混淆器,terser 构建后文件体积更小
  },

  // 本地运行配置,及反向代理配置
  server: {
    port: 3000,  // 验证有效
    cors: true, // 默认启动并允许任何源
    https: false, // 是否开启 https   验证有效,启动服务后,输出的地址是携带了 https 协议
    ssr: false, // 服务端渲染  验证了,但是看不出是否是在服务端渲染
    // open: true, // 在服务器启动时自动在浏览器打开应用程序  本地启动服务,但是并未在浏览器自动打开
    // 反向代理配置,注意rewrite写法
    proxy: {
      // 如果是 /api 打头,则访问地址如下
      "/api": {
        target: "http://10.21.11.100:8080", // 代理地址 瞎写的服务器地址,真实开发场景需要使用真实的地址
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
});

这时候就可以请求成功了,如下图:

 

 

 到这里,axios 的 配置 就介绍完了,接下来看下 fetch 是如何配置的。同样的,我们另起一个新的项目,仍然是用 vite 创建,使用同样的技术栈前提设置

 

fetch

 1、安装

npm install whatwg-fetch --save

  

 

posted on 2022-06-15 15:37  bala001  阅读(888)  评论(0编辑  收藏  举报

导航