axios全局封装(vue3 element-plus)

前言:axios在前端项目中是常用的http请求封装库,基于promise写法,让我们能更好的做异步处理。这里的代码主要借鉴了网上的代码,进行更改成自己的代码。

1.项目中下载axios

这里注意要进项目根目录噢,package.json在的地方。使用npm/pnpm/yarm进行下载。

npm install axios

2.配置全局axios请求文件

创建一个request.js,文件中进行一些axios的配置,如添加请求前缀、超时时间、请求前/请求后的拦截器等。

import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'
//默认超时时间
axios.defaults.timeout = 50000;

//统一请求前缀
axios.defaults.baseURL ='/api'

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
    // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
    config.headers['token'] = localStorage.getItem('token')
    if(config.method.toUpperCase() === 'POST') {
      config.headers['Content-Type'] = 'application/json;charset=utf-8'
    }
    return config
  },
  error => {
    return Promise.error(error)
  })

// 返回拦截器
axios.interceptors.response.use(
    res => {
        console.log(res)
        const back_data = res.data
        //未登录
        if (back_data?.code === 20000){
            router.push('/login')
        }else {  
            ElMessage({
                message: back_data.msg || res.message  ,
                type: 'error',
            })
        }
        return Promise.resolve(res);
    }, 
    error => {
        switch (error.status || error.response.status) {
        case 500: 
            
            ElMessage({
                message: 'sorry,Server Error.',
                type: 'error',
            })
            break
        case 404:
            ElMessage({
                message: '404,api Not Find!',
                type: 'error',
            })
            break
        case 400:
            ElMessage({
                message: 'sorry, 400!',
                type: 'error',
            })
            break
        // 其他错误,直接抛出错误提示
        default:
            ElMessage({
                message: error.message || error.msg,
                type: 'error',
            })
        }
        return Promise.reject(error);
    }
);

function f_base_get (url, params) {
    return new Promise((resolve, reject) => {
        axios.get(url, params)
        .then(res => {
            resolve(res.data)
        })
        .catch(err => {
            reject(err)
        })
    })
}

function f_base_post(url, params){
    return new Promise((resolve, reject) => {
      axios.post(url, params)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
}

//  将Promise 的错误统一捕获
export async function post (url, params) {
    let back = null
    try{
        back = await f_base_post(url, params)
    }catch(e){
        if (e?.response.data === 'The CSRF token is missing.'){
            console.log('CSRF token miss, try again')
            back = await post(url, params)
        }
        // console.log('async post', e)

    }
    return back
}

export async function get(url, params) {
    let back = null
    try{
        back = await f_base_get(url, params)
    }catch(e){
    }
    return back
}

3.创建一个管理api的文件。

写一个统一管理的api文件,api很多可以根据具体请求分类多个管理文件。

import {get, post} from './request'


//登录
export const login = data => post('/login', data)

4.使用api

import { login } from '/api/api.js'


const loginHandle = (formData)=>{
	login(formData).then(res=>{
		//do something...
	})
}

5.怎么请求到后端

一、开发环境中
配置vue.config.js反向代理。

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  chainWebpack: (config) => {
    config.plugin('define').tap((definitions) => {
      Object.assign(definitions[0], {
        __VUE_OPTIONS_API__: 'true',
        __VUE_PROD_DEVTOOLS__: 'false',
        __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false'
      })
      return definitions
    })
  },
  //反向代理
  // 1、这里配置了跨域及代理只针对开发环境生效
  // 2、不建议你在前端配置跨域,建议你后端配置Allow-Origin,Method,Headers,放行token字段,一步到位
  // 3、后端配置了跨域,就不需要前端再配置,会发生Origin冲突
  // 4、webpack5版本前端配置代理无法与mock同时使用,如果一定要用前端代理,需注释setupMiddlewares: require('./mock')
  devServer:{
    // setupMiddlewares: require('./mock'),
    proxy:{
      "/api":{
        target:"http://localhost:8888"
      }
    }
  }
  
})

二、线上环境
配置nginx的反向代理,根据具体需求来配置。

location /api/ {

  proxy_pass: https://mykindle.top:8888;
}

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3和Element Plus是两个不同的技术,Vue3是Vue.js的最新版本,而Element Plus是一个基于Vue.js的UI框架。因此,使用Vue3和Element Plus进行登录注册的过程需要分别实现。 对于Vue3的登录注册,可以使用Vue Router进行路由管理,使用Vuex进行状态管理,使用axios或者fetch进行数据请求和响应。具体实现可以参考Vue3官方文档和相关教程。 对于Element Plus的登录注册,可以使用Element Plus提供的表单组件、按钮组件等进行页面布局和交互。具体实现可以参考Element Plus官方文档和相关教程。 总之,Vue3和Element Plus都是非常优秀的技术,可以帮助开发者快速构建高质量的Web应用程序。 ### 回答2: Vue3和Element Plus是许多Web开发者喜欢使用的技术栈,以其简单性,灵活性和用户友好性而闻名。在这里,我们将讨论如何使用Vue3和Element Plus来创建一个登录和注册的Web应用程序。这个Web应用程序将允许用户注册,登录,查看其个人资料,并编辑其个人资料。 首先,我们需要安装Vue3和Element Plus。您可以在命令行中输入以下内容来安装这些依赖项: ``` npm install vue@next npm install element-plus ``` 现在,让我们创建一个组件,它将包含一个登录表单和一个注册表单。让我们称之为Auth.vue。在这个组件中,我们将使用Element Plus的Form和Input组件来创建这些表单。我们还将使用Vue3的响应式属性来跟踪用户的输入和表单验证状态。 现在,我们可以从我们的数据库中获取所有用户并将其呈现在一个列表中。为了保护我们的数据,我们将需要一个验证机制。我们将使用JWT标记来实现这一点。我们将从服务器端接收JWT令牌并将其存储在用户的浏览器会话中。当用户是在会话中时,我们将可以在以后的请求中使用该令牌来验证它们的请求。 最后,我们需要为用户提供一个编辑资料的页面,在这个页面上用户可以更改其个人资料。在这个页面上,我们需要使用Vue3中的v-model指令将用户的输入与响应式属性关联,以便更新我们的数据库。我们还需使用Element Plus的Input和Button组件来创建表单和提交按钮。 在Web应用程序开发中,Vue3和Element Plus是不可或缺的技术栈。Vue3提供了一种简单,灵活,易于使用的方式来创建响应式Web应用程序。而Element Plus则扩展了Vue3,提供了许多UI组件和简单的API,使您可以快速创建出现代化的Web应用程序。通过使用这些技术,我们可以轻松地创建一个安全,用户友好的登录和注册Web应用程序。 ### 回答3: Vue3是目前前端开发最新的框架版本,相比较于Vue2,具备很多的新特性和优化性能。element-plus是一款基于Vue3开发的开源UI框架,具备简单易用、灵活可扩展、美观大方等特点。在Vue3中使用element-plus框架可以让开发变得更加高效、便捷。 登录和注册是众所周知的常见功能,在element-plus框架中提供了对应的组件来实现这个功能。下面将介绍如何使用element-plus实现登录和注册功能。 首先,需要安装element-plus,它可以通过npm或yarn进行安装,具体方法如下: ``` npm install element-plus --save ``` 或 ``` yarn add element-plus ``` 接着,在main.js中引入element-plus和样式: ```javascript import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 引入完毕后,在登录和注册页面中即可使用element-plus组件: ```html <template> <div> <el-input v-model="username" placeholder="请输入用户名"></el-input> <el-input v-model="password" type="password" placeholder="请输入密码"></el-input> <el-button type="primary" @click="handleLogin">登录</el-button> </div> </template> <script> export default { data() { return { username: '', password: '' } }, methods: { handleLogin() { console.log(this.username, this.password) // 发送登录请求 } } } </script> ``` 在注册页面中使用的组件类似: ```html <template> <div> <el-input v-model="username" placeholder="请输入用户名"></el-input> <el-input v-model="password" type="password" placeholder="请输入密码"></el-input> <el-button type="primary" @click="handleRegister">注册</el-button> </div> </template> <script> export default { data() { return { username: '', password: '' } }, methods: { handleRegister() { console.log(this.username, this.password) // 发送注册请求 } } } </script> ``` 上述代码中使用了element-plus的input和button组件,用于输入和提交数据。除此之外,element-plus还提供了大量常用的组件和特性,开发者可以根据自己的需求进行选择使用。 综上所述,使用element-plus可以让Vue3开发变得更加高效,特别是在实现常见功能时,用它提供的组件可以让开发者避免重复造轮子的问题,提升开发效率和体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值