vue3.0使用promise封装axios请求

参考链接https://www.jianshu.com/p/ae793364e171

下载axios

npm install axios --save

文件存放

  1. 在src文件夹内新建 utils文件夹
  2. 在utils文件夹中建立一个request.js文件(存放axios相关
  3. 在utils文件夹内建立一个api文件夹,其中建立js文件(如果有需求可以建立多个按页面或者其他模块化),用来存放具体的请求

封装axios

import axios from 'axios';

// 设置axios
const service = axios.create({
    baseURL: "/api"    //基础路径设置在vite.config.js中,解决跨域问题
})
// 封装post请求
let post = function (url, data_ = {}) {
    return new Promise((resolve, reject) => {
        service.post(url, data_).then((res) => {
            // 成功
            return resolve(res)
        }).catch((err) => {
            // 失败
            return reject(err)
        })
    })
}
let get = function(url,data_ ={}){
    return new Promise((resolve, reject) => {
        let params = data_;
        service.get(url, {
            params
        }).then((res) => {
            // 成功
            return resolve(res)
        }).catch((err) => {
            // 失败
            return reject(err)
        })
    })
}

// 添加请求拦截
service.interceptors.request.use(config => {
    // 添加请求头
    config.headers = {
        "authorization": localStorage.token 
    }
    return config;
})
// 添加响应拦截
service.interceptors.response.use(res => {
    return res.data
}, err => {
    return err
})

// 导出
export default {
    post,
    get,
}

具体请求实现

import axios from '../request.js';

//获取首页数据
export function getIndexData(){
	return axios.get('Index',{action:"getHomeData"})
}

// 获取系列数据
export function getCategoryList(data){
	return axios.get('ProductList',data)
}


注:axios.get(‘路径名’,携带参数)
注:携带参数类型为对象,即**{属性1,属性2……属性n}**

使用

// 获取首页数据
			getIndexData().then(res => {
				console.log(res);
			})

题外话:vue3.0中页面渲染数据,我将该请求放在beforeMount() 中,即数据获取成功才渲染页面,不知这样有没有什么弊端哈哈哈。

跨域

// 项目使用了vite,则在vite.config.js文件中。
// 如仅使用vue,可百度看看其他人的写法,差距不大。

//vite.config.js
import {
	defineConfig
} from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
   //……
	server: {
		proxy: {
			'/api': { // 需要注意的是这里的 /api 要与utils文件下面的axios.js文件的基础路径保持一致
				target: "", // 后端地址
				changeOrigin: true,
				rewrite: (path) => path.replace(/^\/api/, '')
			}
		}
	},
	//……
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值