首页 > 其他分享 >Nuxt3 axios封装 使用axios接口请求

Nuxt3 axios封装 使用axios接口请求

时间:2024-08-09 15:26:48浏览次数:8  
标签:axios 封装 Nuxt3 token error duration ElMessage message response

一、先安装axios npm install add axios

封装请求request.ts文件

import axios from 'axios'
import { ElMessage, Message } from "element-plus"
import {getToken} from './token.js'
const service = axios.create({
     baseURL:'/api',//本地使用
})
service.interceptors.request.use(
    config => {
        const token = getToken()
        //登录后获取token
        if(token){
            config.headers.token = `${token}`
        }
        return config
    },
    err => {
        return Promise.reject(err)
    })
service.interceptors.response.use(
    response => {
        if (response.data.code != 200) {
            return Promise.reject(response.data)
        } else {
            return response.data
        }
    },
    error => {
        console.log('error:', error)
        if(error.response){
            if(error.response.status == 304){
                ElMessage({
                    message: error.response.data.msg,
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else if(error.response.status == 400){
                ElMessage({
                    // message: response.data.message,
                    message:'请求参数错误,状态码400!',
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
                
            }
            else if(error.response.status == 401){
                ElMessage({
                    // message: response.data.message,
                    message:'您还未登录或登录过期,请先登录!',
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else if(error.response.status == 403){
                ElMessage({
                    message: '您没有权限访问资源!',
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else if(error.response.status == 404){
                ElMessage({
                    message: '请求资源不存在!',
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else if(error.response.status == 405){
                ElMessage({
                    message: '请求地址错误',
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else if(error.response.status == 500){
                ElMessage({
                    message: '服务器错误!状态码500',
                    // message:Response.data.message,
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else if(error.response.status == 503){
                ElMessage({
                    message: '服务器维修中,请稍后再试!状态码503',
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else if(error.response.status == 504){
                ElMessage({
                    message: '网关超时!状态码504',
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
            else{
                ElMessage({
                    message: '未知错误!状态码:'+error.response.data.code,
                    type: 'error',
                    duration: 2000 //提示持续2秒
                })
            }
        }else{
            ElMessage({
                message: '请求错误!请求服务器无响应!',
                type: 'error',
                duration: 2000 //提示持续2秒
            })
        }
        return Promise.reject(error.response)
    })

export default service

如果需要使用token,则写一个token.js文件,需要安装js-cookie,自行安装

import Cookie from 'js-cookie'
 
const TokenKey = 'token'
 
export function getToken() {
  return localStorage.getItem(TokenKey)
}
 
export function setToken(token) {
  return Cookie.set(TokenKey, token)
}
 
export function removeToken() {
  return localStorage.removeItem(TokenKey)
}

2.如果项目是前后端分离的,服务请求接口要请求后端给的接口,则需要开启请求代理

在nuxt.config.ts文件中

export default defineNuxtConfig({


    .................其他配置


	vite:{
		server: {
			proxy: {
			  '/api': {
				//后端的请求接口http://xxx.xxx.xxxx/api'
				target: 'http://xxx.xxx.xxxx', // 目标服务器地址
				changeOrigin: true, // 启用代理时,改变源地址
				// 其他可选配置...
				//写这段代码可以看到后端真正的代理请求接口
				bypass(req, res, options: any) {
					const realUrl = options.target + (options.rewrite ? options.rewrite(req.url) : '');
					console.log('realUrl:', realUrl); // 在终端显示
					res.setHeader('A-Real-Url', realUrl); // 添加响应标头(A-Real-Url为自定义命名),在浏览器中显示
				}
			  }
			}
		  }
	},
})

标签:axios,封装,Nuxt3,token,error,duration,ElMessage,message,response
From: https://blog.csdn.net/qq_55961367/article/details/140682897

相关文章

  • 二、Tauri 使用(http请求 axios)
    1.启用该功能        在tauri.conf.json文件中启用该功能,配置要请求的API路径,多个API的情况使用逗号隔开就可以了{ "tauri":{  "allowlist":{   "http":{    "all":true,    "request":true,    "scope":["http:......
  • PHP处理图片成指定大小的缩略图--简单封装的类
    <?PHP//图像处理类classImage{private$file;//图片地址private$width;//图片长度private$height;//图片长度private$type;//图片类型private$img;//原图的资源句柄private$new;//新图的资源句柄//构造方法,......
  • 在C#中配置ini文件以及封装ini类
    在C#中使用DllImport属性从kernel32.dll导入函数来写入和读取Windows的INI文件,你可以使用WritePrivateProfileString来写入数据,使用GetPrivateProfileString来读取数据。以下是如何使用这些函数的示例:写入INI文件usingSystem;usingSystem.Runtime.InteropServic......
  • Swift asyns 封装思路
    Aynscs.swiftpublictypealiasTask=()->VoidpublicstructAynscs{//异步publicstaticfuncasyns(task:@escapingTask){_asyns(task:task)}//异步完成->同步publicstaticfuncasyns(task:@escapingTask,ma......
  • react中封装Echarts
    下载npxcreate-react-appmy-echarts创建公共组件importReact,{useState,useEffect,useMemo}from'react';import*asechartsfrom"echarts";constEChartsComponent=({option})=>{const[echartsInstance,setEchartsInstance]=u......
  • vue3(nuxt3)+Aliplayer播放器进行直播播流
    前言:    上一篇讲到使用自定义的一个播放器去进行播流进行观看直播,由于之前都是自己研发的,服务器不是特别好,所以决定使用阿里的推流以及阿里的播放器去进行拉流也更加的适配吧,至少后面出现问题可以有文档看比较完善实践    1.这里的话先把官方文档的地......
  • vue中axios二次封装【简洁、附代码】+api解耦
    reference:https://www.bilibili.com/video/BV1my421h7hK/?share_source=copy_web&vd_source=334dbcc5ec1e90276a3fca594c89e11e下一篇:继axios二次封装后跨域问题解决——配置代理、环境变量文章目录一、axios请求接口1下载2引入3使用二、axios二次封装1.下......
  • 重学面向对象-基础篇03封装、继承和多态
    封装、继承和多态基础概念封装:把对象的属性和方法结合城一个独立的整体,隐藏实现细节,并提供对外访问的接口继承:从已知的一个类中派生出一个新的类,叫子类。子类实现了父类所有非私有化的属性和方法,并根据实际需求扩展出新的行为多态:多个不同的对象对同一消息作出响应,同一消息根......
  • 如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC
    如何把Connection封装到工具类里面调用工具类方法实现增删改查操作javaJDBC使用数据库连接池以HikariCP为例在JDBC中,使用数据库连接池是一个常见的做法,以提高数据库操作的效率和性能。连接池管理着一组数据库连接,这些连接可以被重用而不是每次需要时都创建新的连接。......
  • 如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC使用
    如何把Connection封装到工具类里面调用工具类方法实现增删改查操作javaJDBC使用C3P0数据库连接池答:当使用C3P0作为数据库连接池时,你可以按照类似的模式来配置和使用它。以下是一个示例,展示了如何在Java项目中配置C3P0连接池,并创建一个工具类来管理数据库连接和执行基本的......