前后端分离项目下 前端axios接口封装 的 优质解决方案

项目基于typescript语言,封装登录axios请求

文件目录如下

-src

--pages
---login

--services
---login.ts
---baseURL.ts


首先,创建一个单独的文件,命名为 baseUrl.ts,并在其中定义基础URL:

// baseUrl.ts

export const baseUrl = 'https://example.com';

然后,在需要使用基础URL的文件中导入并使用它,在login.ts中:

import axios, { AxiosInstance } from 'axios';
import { baseUrl } from './baseUrl'; // 导入基础URL

// 创建一个 Axios 实例并设置基础URL
const axiosInstance: AxiosInstance = axios.create({
  baseURL: baseUrl, // 使用导入的基础URL
});

// 登录接口
export interface LoginParams {
  username: string;
  password: string;
}

export interface LoginResponse {
  token?: string;
  status?: number; // 可选的状态码属性
  message?: string; // 可选的消息属性
}

export async function login(params: LoginParams): Promise<LoginResponse> {
  try {
    const response = await axiosInstance.post('/api/login', params); // 使用 Axios 实例发送请求
    console.log(response.data)
    
    if (response.data.status === 200) {
        return response.data;
    } else if (response.data.status === 404) {
        // 对状态码为 404 的情况进行特殊处理,不抛出错误,可以根据业务需求进行相应操作
        console.log('用户不存在或密码错误');
        return { status: 404, message: 'User not found or incorrect password' };
    } else {
        throw new Error(response.data.message);
    }
  } catch (error) {
    throw new Error('登录失败'); 
  }
}

在login.ts中可以直接引入使用:

import { LoginParams, LoginResponse, login } from '../services/login';

      const handleLoginSubmit = (username: string, password: string) => {

        const params: LoginParams = {
            username: username,
            password: password,
        };
        console.log('User: ' + username);
        console.log('Password:' + password);

        login(params)
            .then((response: LoginResponse) => {
                if(response.status === 200){
                    console.log('登录成功,Token:', response.token);
                    navigate('/manage');
                }
               else if(response.status === 400){
                console.log(response.message);
               }
            })
            .catch((error: Error) => {
                console.error('登录失败:', error.message);
            });
    };

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值