FastMock及axios二次封装及$api全局变量挂载

一、在src目录下配置两个文件夹api和config

二、api负责mock数据的管理和ajax请求的二次封装

api/index.js

import request from "./request";

export default {
	getData () {
		return request({
			url: '/home/getData',
			method: 'get',
			mock: true
		})
	},
	getCityData () {
		return request({
			url: '/city/getCityData',
			method: 'get',
			mock: true
		})
	},
	getDetailData (params) {
		return request({
			url: '/detail/getDetailData',
			method: 'get',
			mock: true,
			data: params
		})
	},
}

api/request.js

import axios from 'axios'
import config from '../config'
import { Message } from 'element-ui';
const NETWORK_ERROR = '网络请求异常,请稍后重试...'
// 创建一个axios实例对象
co
### 实现 UniApp Vue3 项目中的 Axios 全局封装 #### 安装 Axios 库 为了能够在 UniApp 的 Vue3 项目中使用 Axios 进行 HTTP 请求,首先需要安装 Axios。进入项目的根目录,在该位置存在 `package.json` 文件。 ```bash npm install axios ``` 此命令会将 Axios 添加至依赖项列表中[^1]。 #### 创建全局 Axios 配置文件 创建一个新的 JavaScript 或 TypeScript 文件用于定义全局的 Axios 请求配置。通常命名为 `axiosConfig.js` 或者类似的名称: ```javascript import axios from 'axios'; // 设置基础 URL 和其他默认参数 const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 使用环境变量设置 API 基础路径 timeout: 5000, }); // 请求拦截器 service.interceptors.request.use( config => { // 可在此处处理请求前的操作,比如添加 token 到 header 中 return config; }, error => Promise.reject(error) ); // 响应拦截器 service.interceptors.response.use( response => response.data, error => Promise.reject(error) ); export default service; ``` 这段代码设置了 Axios 的基本选项,并实现了简单的请求与响应拦截功能。 #### 将 Axios 方法挂载到应用实例上 为了让所有的页面都能方便地访问 `$get`, `$post` 等方法,可以在 `main.js` 中通过 `globalProperties` 对象来注册这些自定义属性: ```javascript import { createApp } from 'vue'; import App from './App.vue'; import router from './router'; // 如果有路由的话 import store from './store'; // 如果有状态管理的话 import axiosInstance from './utils/axiosConfig'; // 上一步创建的服务实例 const app = createApp(App); app.config.globalProperties.$axios = axiosInstance; // 提供 get/post 方法给模板调用 app.config.globalProperties.$get = (...args) => axiosInstance.get(...args); app.config.globalProperties.$post = (...args) => axiosInstance.post(...args); if (!process.env.IS_WEB) Vue.use(require('vue-router')); app.use(router).use(store).mount('#app'); ``` 这样做的好处是在任何组件内部都可以直接使用 `this.$axios()`, `this.$get()` 或者 `this.$post()` 发起网络请求而无需重复导入 Axios[^2]。 #### 组件内发起请求的例子 一旦完成了上述步骤之后,在任何一个 Vue 组件里就可以像下面这样做来进行数据获取操作了: ```html <template> <div>{{ message }}</div> </template> <script setup lang="ts"> import { ref, onMounted } from 'vue' let message = ref(''); onMounted(() => { this.$get('/api/hello') .then(response => { message.value = response.message || ''; }) }); </script> ``` 以上就是在 UniApp Vue3 项目中实现 Axios 全局封装的方法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值