【Vue3】封装axios请求(cli和vite)

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。

Vue

【Vue3】env环境变量的配置和使用(区分cli和vite)


文章目录

  • Vue
  • 前言
  • 一、常见用法
  • 二、vue3+cli封装接口
    • 1..env配置
    • 2..dev(开发环境,其他环境自己配置)
    • 3.vue.config.js文件
    • 4.封装axios请求
      • 4.1 在api文件夹中新建request.js
      • 4.2 新建接口rule.js
      • 4.3 新建index.js
      • 4.4 App.vue引用
      • 4.5 全局使用api


前言


一、常见用法

我们将创建api文件夹,包含index.js和request.js,剩下的rule.js就是实际接口文件。
在这里插入图片描述

二、vue3+cli封装接口

vue3+cli的项目,配置中需要以VUE_APP开头。

1…env配置

VUE_APP_PORT = 8080

2…dev(开发环境,其他环境自己配置)

VUE_APP_API_HOST = '127.0.0.1'
VUE_APP_API_HOST = '8000'
VUE_APP_API_BASE_URL = "http://127.0.0.1:8000/api"

VUE_APP_ENV = 'development'

3.vue.config.js文件

如果项目没有此文件,需要自己创建,位置参考第一部分截图。
这里的devServer配置表示代理,即将前端的host、port和路由代理至api接口。其中’/api’很重要,后边会用到。
下述代码表示将http://127.0.0.1:8080/api代理至http://127.0.0.1:8000/api)

const {
	defineConfig
} = require('@vue/cli-service')
module.exports = defineConfig({
	transpileDependencies: true,
	assetsDir: 'static',

	devServer: {
		// host: process.env.VUE_APP_HOST,
		// port: process.env.VUE_APP_PORT, //端口
		// https: false, //false关闭https,true为开启
		// open: true, //自动打开浏览器
		proxy: {
			'/api': {
				target: process.env.VUE_APP_API_BASE_URL,
				changeOrigin: true,
				pathRewrite: {
					'/api': ''
				}
			}
		}
	}
})

4.封装axios请求

4.1 在api文件夹中新建request.js

这里的baseURL: “/api"中的”/api",与第三部的代理一致。

// 导入axios
import axios from 'axios'

const request = axios.create({
	// baseURL 将自动加在 url`前面,除非 url 是一个绝对 URL。
	// 它可以通过设置一个 baseURL 便于为 axios 实例的方法传递相对 URL
	baseURL: "/api",
	// timeout设置一个请求超时时间,如果请求时间超过了timeout,请求将被中断,单位为毫秒(ms)
	timeout: 60000,
	// headers是被发送的自定义请求头,请求头内容需要根据后端要求去设置,这里我们使用本项目请求头。
	headers: {
		'Accept': 'application/json',
		'Content-Type': 'application/json',
		'Access-Control-Allow-Origin': '*'
	}
})

// 请求拦截器
request.interceptors.request.use(
	config => {
		// 在请求发送之前可以做一些处理,比如添加请求头等
		return config;
	},
	error => {
		// 请求错误处理
		return Promise.reject(error);
	}
);

// 响应拦截器
request.interceptors.response.use(
	response => {
		// 在这里可以对响应数据进行处理
		return response.data;
	},
	error => {
		// 响应错误处理
		return Promise.reject(error);
	}
)

export default request

4.2 新建接口rule.js

import request from './request.js'

export function getrules(params) {
	return request({
		url: '/rule/rule/',
		method: 'get',
		params: params
	})
}

export function postrule(data) {
	return request({
		method: 'post',
		data: data,
		url: '/rules'
	})
}

export function updaterule(id, data) {
	return request({
		method: 'post',
		data: data,
		url: '/rules/${id}'
	})
}

export default {
	getrules,
	postrule,
	updaterule,
}

4.3 新建index.js

import rule from './rule.js'

export default {
	rule,
}

4.4 App.vue引用

<script setup>
	import {
	rule
	} from '@/api/rule.js'
	console.log('hello script setup2', rule.getrules())
</script>

4.5 全局使用api

修改项目的main.js文件,加载全局属性

import {
	createApp
} from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

import router from "./router";
import store from "./store";
import api from "./api";

const app = createApp(App)
app.config.globalProperties.$api = api // 挂载全局

app.use(router).use(store).use(ElementPlus).mount('#app')

vue3一般的script

<script>
	// 请求rules
	function get() {
console.log(this.$api.rule.getrules())
	}
</script>

vue3一般的script+setup

<script setup>
	// 请求rules
	const cns = getCurrentInstance()
	console.log(cns.appContext.config.globalProperties.$api)
	console.log('hello script setup')
	function get() {
console.log(cns.appContext.config.globalProperties.$api.rule.getrules())
	}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我辈李想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值