自学内容网 自学内容网

Nuxt3 axios封装 使用axios接口请求

一、先安装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为自定义命名),在浏览器中显示
}
  }
}
  }
},
})

原文地址:https://blog.csdn.net/web14786210723/article/details/144461535

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!