当前位置:首页 > 技术 > 正文内容

基于Axios的HTTP请求封装方案

访客 技术 2026年7月28日 1

1 概述

利用Axios提供的请求拦截与响应处理机制,实现统一的请求管理与身份验证处理。 前提条件:项目已集成Axios库。 安装指令示例:

npm install axios 

2 实现方案

2.1 在工具目录创建请求模块

// HTTP客户端配置
import axios from 'axios'
import router from '@/router'

// 创建自定义请求实例
const httpClient = axios.create({
    baseURL: 'https://api.example.com/v1', // 服务端基础路径
    headers: {
        'Content-Type': 'application/json'
    },
    timeout: 5000
})

// 请求拦截逻辑
httpClient.interceptors.request.use(
    config => {
        // 非登录接口添加认证令牌
        if (localStorage.getItem('auth_token') && !config.url.includes('/login')) {
            config.headers['X-Auth-Token'] = localStorage.getItem('auth_token')
        }
        // 自动处理参数传递方式
        if (['POST', 'PUT', 'PATCH'].includes(config.method.toUpperCase())) {
            config.data = config.params
        }
        return config
    },
    error => Promise.reject(error)
)

// 响应拦截处理
httpClient.interceptors.response.use(
    response => {
        // 处理业务状态码
        if (response.data.status !== 200) {
            console.warn(response.data.message || '接口调用异常')
        }
        return response.data
    },
    error => {
        if (error.code === 'ECONNABORTED') {
            console.error('请求超时,正在重定向至登录页')
            router.replace('/login')
            return Promise.reject(error)
        }
        // 处理未授权情况
        if (error.response?.status === 401) {
            localStorage.removeItem('auth_token')
            console.warn('会话过期,请重新登录')
            router.push('/login')
        } else {
            console.error('网络异常,请稍后重试')
        }
        return Promise.reject(error)
    }
)

export default httpClient  // 导出请求实例


2.2 在API目录建立统一入口

// 示例:登录相关接口导出
import {fetchAuthToken, getUserProfile} from './login'

export default {
    fetchAuthToken,
    getUserProfile
}

2.3 在API目录创建具体接口文件

// 请求封装模块
import httpService from '@/utils/httpService'

// 授权接口实现
export const fetchAuthToken = data => httpService({
    url: '/auth/token',
    method: 'POST',
    data
})

// 用户信息接口
export const getUserProfile = () => httpService({
    url: '/user/profile',
    method: 'GET'
})

3 使用示例

api.fetchAuthToken({
  username: this.loginName,
  password: this.password
}).then(response => {
  // 保存认证信息
  localStorage.setItem('auth_token', 'Bearer ' + response.token)
  // 跳转主页
  this.$router.push('/dashboard')
}).catch(err => {
  console.error('登录失败:', err.message)
})

api.getUserProfile().then(data => {
  // 处理用户数据
  this.userInfo = data
}).catch(err => {
  console.error('获取失败:', err)
})

标签: Axios拦截器
返回列表

上一篇:Codeforces 1234 题目详解与实现策略

没有最新的文章了...

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。