axios.get(config)axios.post(config)axios.request(config)axios.head(config)axios.put(config)axios.patch(config)axios.delete(config)
<template><button @click="axi()">axios</button></template><script setup>import axios from "axios";//引入axiosfunction axi(){axios({url:'https://api.baidu.cn/api/index',method:'get',params:{page:1,}}).then(res=>{console.log(res)})}</script>
import axios from "axios"import router from '../router'import {Toast} from "vant";// 创建实例时设置配置的默认值const service = axios.create({timeout: 10000,// 超时时间// baseURL: 'http://apis.juhe.cn',//默认请求URlheaders: 'application/x-www-form-urlencoded;charset=UTF-8',});// 请求拦截器,在发送请求之前做些什么service.interceptors.request.use((config) => {// 如果API需要认证, 在这统一设置const token = window.localStorage.getItem('token');if (token) {config.headers.Authorization = 'Bearer ' + token;}// config.headers['token']='' //没有登陆界面时,可以不携带tokenreturn config;}, error => {// 对请求错误做些什么return Promise.reject(error);});// 响应拦截器service.interceptors.response.use((response) => {// 对响应数据做点什么// 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据,否则的话抛出错误if (response.status === 200) {return Promise.resolve(response);} else {return Promise.reject(response);}}, error => {// 对响应错误做点什么switch (error.response.status) {// 401: 未登录// 未登录则跳转登录页面,并携带当前页面的路径// 在登录成功后返回当前页面,这一步需要在登录页操作。case 401:router.replace({path: '/login',query: {redirect: router.currentRoute.fullPath}});break;// 403 token过期// 登录过期对用户进行提示// 清除本地token和清空vuex中token对象// 跳转登录页面case 403:Toast({duration: 2000,message: '登录过期,请重新登录'});// 清除tokensessionStorage.removeItem('token');// 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面setTimeout(() => {router.replace({path: '/login',query: {redirect: router.currentRoute.fullPath}});}, 1000);break;// 404请求不存在case 404:Toast({duration: 3000,message: '网络请求不存在'});break;// 其他错误,直接抛出错误提示default:Toast({duration: 4000,message: error.response.data.message});}return Promise.reject(error.response);});export default service;
// 导入封装好的axios实例import service from './axios';const isProduction=process.env.NODE_ENV === 'production'//是否生产环境const httpList = {test:{ // 测试环境http1:'http://localhost:8080', // ip1http2:'ws://197.82.15.15:8082', // ip2},production: { // 生产环境http1:'http://192.168.3.44',// ip1http2:'ws://197.82.15.15:8084', // ip2}};let baseUrl;if (isProduction) { // 是否生产环境baseUrl = httpList['production'];}else{baseUrl = httpList['test'];}const request = {/*** methods: 请求* @param url 请求地址* @param params 请求参数*/get(url,params,httpType='http1'){const config = {method: 'get',url:baseUrl[httpType]+url};if(params) config.params = params;return service(config)},post(url,params,httpType='http1'){const config = {method: 'post',url:baseUrl[httpType]+url};if(params) config.data = params;return service(config)},put(url,params,httpType='http1'){const config = {method: 'put',url:baseUrl[httpType]+url};if(params) config.params = params;return service(config)},delete(url,params,httpType='http1'){const config = {method: 'delete',url:baseUrl[httpType]+url};if(params) config.params = params;return service(config)},video:`${baseUrl.http1}/video`,//视频地址image:`${baseUrl.http1}/image`//图片地址};export default request;
import { createApp } from 'vue'import App from './App.vue'import './registerServiceWorker'import router from './router'import store from './store'import request from './network/request'import 'element-plus/dist/index.css'const app = createApp(App)app.use(store).use(router).use(ElementPlus).mount('#app')app.config.globalProperties.$request = request;//挂载搞组合式全局window.request=request//挂载到window
<script setup>import {getCurrentInstance} from 'vue'const {proxy} = getCurrentInstance()function axi(){proxy.$request.get('/api/simpleWeather/query'{page:1})}</script>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号