cnmksjs's picture
Upload 49 files
40e991e verified
import axios from 'axios';
import { AuthResponse, LoginData, RegisterData, Message } from '../types';
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:5000';
const api = axios.create({
baseURL: `${API_BASE_URL}/api`,
headers: {
'Content-Type': 'application/json',
},
});
// 请求拦截器 - 添加认证token
api.interceptors.request.use((config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// 响应拦截器 - 处理认证错误
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
localStorage.removeItem('token');
localStorage.removeItem('user');
window.location.href = '/login';
}
return Promise.reject(error);
}
);
export const authAPI = {
login: async (data: LoginData): Promise<AuthResponse> => {
const response = await api.post('/login', data);
return response.data;
},
register: async (data: RegisterData): Promise<AuthResponse> => {
const response = await api.post('/register', data);
return response.data;
},
};
export const messageAPI = {
getMessages: async (room: string = 'general', limit: number = 50): Promise<Message[]> => {
const response = await api.get('/messages', {
params: { room, limit }
});
return response.data;
},
};
export default api;