vue项目(七)安装配置axios,vue前端访问后端接口

打印 上一主题 下一主题

主题 979|帖子 979|积分 2941

一、安装axios

npm i axios -g
二、创建axios实例,设置请求和响应拦截器

在src下面新建文件夹utils,下面新建文件request.js

  1. // 引入 axios
  2. import axios from "axios"; // 使用前要先安装依赖:npm install axios
  3. //引入 element-ui 信息
  4. import { ElMessage } from 'element-plus';
  5. import router from "@/router";
  6. // 创建axios实例
  7. const service = axios.create({
  8.   // 这里可以放一下公用属性等。
  9.   // 用于配置请求接口公用部分,请求时会自动拼接在你定义的url前面。
  10.   //设置axios请求的地址默认是'/api',这样根据第一步中配置的会将/api替换为'192.128.0.0/'
  11.   baseURL: "/api", // 使用环境变量
  12.   withCredentials: false, // 跨域请求时是否需要访问凭证
  13.   timeout: 5000, // 请求超时时间
  14.   headers: {
  15.     // 可以放一下公用的请求头信息
  16.     Accept: "application/json",
  17.     "Content-Type": "application/json",
  18.   },
  19. });
  20. //请求拦截器
  21. service.interceptors.request.use(
  22.   (config) => {
  23.     // 在这里可以进行请求加密等操作,比如添加 token、cookie,修改数据传输格式等。
  24.     // 设置请求头
  25.     config.headers.Accept = "application/json";
  26.     config.headers["Content-Type"] = "application/json";
  27.     // 获取 token 并设置 Authorization 头部
  28.     let token =
  29.       window.localStorage.getItem("token") ||
  30.       window.sessionStorage.getItem("token");
  31.     if (token) {
  32.       config.headers["Authorization"] = "Bearer " + token;
  33.     }
  34.     // 可根据需要添加其他自定义头部
  35.     // config.headers["custom-header"] = "xxxx";
  36.     return config;
  37.   },
  38.   (error) => {
  39.     console.log(error);
  40.     return Promise.reject(error);
  41.   }
  42. );
  43. // 响应拦截器
  44. service.interceptors.response.use(
  45.   (response) => {
  46.     // 对响应数据做处理
  47.     return response;
  48.   },
  49.   (error) => {
  50.     // 请求失败进行的操作
  51.     if (error.response && error.response.status) {
  52.       switch (error.response.status) {
  53.         case 401:
  54.           ElMessage.warning("尚未登录,请登录!");
  55.           router.push("/login");
  56.           break;
  57.         case 403:
  58.           ElMessage.error("权限不足!");
  59.           break;
  60.         case 404:
  61.           ElMessage.error("请求资源不存在!");
  62.           break;
  63.         case 500:
  64.           ElMessage.error("服务器错误!");
  65.           break;
  66.         default:
  67.           ElMessage.error(`请求错误: ${error.response.status} - ${error.response.data.message}`);
  68.       }
  69.     } else {
  70.       ElMessage.error("网络错误或请求超时!");
  71.     }
  72.     return Promise.reject(error);
  73.   }
  74. );
  75. export default service;
复制代码
三、设置请求跨域接口

在vue.config.js中添加设置能请求跨域接口
  1. const { defineConfig } = require('@vue/cli-service');
  2. const AutoImport = require('unplugin-auto-import/webpack');
  3. const Components = require('unplugin-vue-components/webpack');
  4. const { ElementPlusResolver } = require('unplugin-vue-components/resolvers');
  5.                         
  6. module.exports = defineConfig({
  7.   transpileDependencies: true,
  8.   lintOnSave:false,
  9.   configureWebpack: {
  10.   //设置跨域
  11.     devServer: {
  12.       proxy: {
  13.         "/api": {//捕获API的标志,如果API中有这个字符串,那么就开始匹配代理,
  14.           target: "https://www.runoob.com",//代理的api地址,就是要跨域的地址
  15.           changeOrigin: true,// 这个参数可以让target参数是域名
  16.           ws: true,//是否启用websockets,用不到可设为false
  17.           pathRewrite: {//对路径匹配到的字符串重写
  18.             "^/api": "",
  19.           }
  20.         }
  21.       }
  22.     },
  23.     //结束
  24.     plugins: [
  25.       AutoImport({
  26.         resolvers: [ElementPlusResolver()],
  27.       }),
  28.       Components({
  29.         resolvers: [ElementPlusResolver()]
  30.       })
  31.     ]
  32.   }
  33. })
复制代码
四、接口请求并处置惩罚数据

在utils下面新建文件http.js

  1. import service from "./request";
  2. const HttpMethod = {
  3.   GET: "GET",
  4.   POST: "POST",
  5.   PUT: "PUT",
  6.   DELETE: "DELETE",
  7. };
  8. const defaultHeaders = {
  9.   "Content-Type": "application/json",
  10. };
  11. const createConfig = (method, url, data = {}, headers = {}, config = {}) => ({
  12.   method,
  13.   url,
  14.   ...(method === HttpMethod.GET || method === HttpMethod.DELETE
  15.     ? { params: data }
  16.     : { data }),
  17.   headers: { ...defaultHeaders, ...headers },
  18.   ...config, // 支持额外的配置选项
  19. });
  20. const handleResponse = async (requestPromise, method, url) => {
  21.   try {
  22.     const response = await requestPromise;
  23.     return response.data;
  24.   } catch (error) {
  25.     console.error(
  26.       `Error occurred while making ${method} request to ${url}:`,
  27.       error.response ?
  28.         `${error.response.status} - ${error.response.data.message}` :
  29.         error.message
  30.     );
  31.     throw error; // 重新抛出错误,以便调用者可以处理
  32.   }
  33. };
  34. const http = {
  35.   request(method, url, data = {}, headers = {}, config = {}) {
  36.     const requestConfig = createConfig(method, url, data, headers, config);
  37.     return handleResponse(service(requestConfig), method, url); // 传入报错时可定位到method 和 url
  38.   },
  39.   get(url, params = {}, headers = {}, config = {}) {
  40.     return this.request(HttpMethod.GET, url, params, headers, config);
  41.   },
  42.   post(url, data = {}, headers = {}, config = {}) {
  43.     return this.request(HttpMethod.POST, url, data, headers, config);
  44.   },
  45.   put(url, data = {}, headers = {}, config = {}) {
  46.     return this.request(HttpMethod.PUT, url, data, headers, config);
  47.   },
  48.   delete(url, params = {}, headers = {}, config = {}) {
  49.     return this.request(HttpMethod.DELETE, url, params, headers, config);
  50.   },
  51. };
  52. export default http;
复制代码
五、页面可调用的接口

在utils文件夹内里新建文件夹api,每个页面创建一个对应的js文件,在文件中放你要请求的接口,通过export default方式抛出在页面上调用

  1. import http from "@/utils/http";
  2. export function fetchList(params = {}, headers = {}, config = {}) {
  3.   return http.get("/try/ajax/json_demo.json", params, headers, config);
  4. }
复制代码
六、在页面上调用接口

FirstView.vue文件中
  1. <template>
  2.   <div id="app">
  3.                   {{ info }}
  4. </div>
  5. </template>
  6. <script>
  7. import { fetchList } from '@/utils/api/first';
  8. export default {
  9.   data() {
  10.     return {
  11.       info: "111"
  12.     };
  13.   },
  14.   mounted () {
  15.     fetchList()
  16.     .then(response => this.info = response)
  17.     .catch(function (error) { // 请求失败处理
  18.         console.log(error);
  19.     });
  20.   }
  21. }
  22. </script>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表