Files
MyfronyProject/src/axios/api.js
qingfeng1121 b8362e7835 feat: 重构前端项目结构并添加新功能
重构项目目录结构,将组件和服务模块化
添加Element Plus UI库并集成到项目中
实现文章、留言和分类的类型定义
新增工具函数模块包括日期格式化和字符串处理
重写路由配置并添加全局路由守卫
优化页面布局和响应式设计
新增服务层封装API请求
完善文章详情页和相关文章推荐功能
2025-10-12 14:24:20 +08:00

88 lines
2.7 KiB
JavaScript

import axios from 'axios'
// 创建axios实例
const service = axios.create({
baseURL: 'http://localhost:8080/api', // api的base_url
timeout: 3000, // 请求超时时间
headers: {
'Content-Type': 'application/json'
}
// withCredentials: true, // 跨域请求时是否需要使用凭证
})
// 请求拦截器 - 添加认证token
service.interceptors.request.use(
config => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器 - 统一处理响应
service.interceptors.response.use(
response => {
// 检查响应是否成功
if (response.data && response.data.success) {
return response.data
} else {
// 处理业务错误
return Promise.reject(new Error(response.data?.message || '请求失败'))
}
},
error => {
// 处理HTTP错误
console.error('API请求错误:', error)
// 可以在这里添加全局错误处理,如显示错误提示
return Promise.reject(error)
}
)
// 文章相关API
export const articleAPI = {
// 获取所有文章
getAllArticles: () => service.get('/articles'),
// 获取单篇文章
getArticleById: (id) => service.get(`/articles/${id}`),
// 根据分类获取文章
getArticlesByCategory: (categoryId) => service.get(`/articles/category/${categoryId}`),
// 获取热门文章
getPopularArticles: () => service.get('/articles/popular'),
// 创建文章
createArticle: (articleData) => service.post('/articles', articleData),
// 更新文章
updateArticle: (id, articleData) => service.put(`/articles/${id}`, articleData),
// 删除文章
deleteArticle: (id) => service.delete(`/articles/${id}`)
}
// 留言相关API
export const messageAPI = {
// 获取所有留言
getAllMessages: () => service.get('/messages'),
// 获取单条留言
getMessageById: (id) => service.get(`/messages/${id}`),
// 根据文章ID获取留言
getMessagesByArticleId: (articleId) => service.get(`/messages/article/${articleId}`),
// 获取根留言
getRootMessages: () => service.get('/messages/root'),
// 根据父留言ID获取回复
getRepliesByParentId: (parentId) => service.get(`/messages/parent/${parentId}`),
// 根据昵称搜索留言
searchMessagesByNickname: (nickname) => service.get(`/messages/search?nickname=${nickname}`),
// 获取文章评论数量
getMessageCountByArticleId: (articleId) => service.get(`/messages/count/${articleId}`),
// 创建留言
saveMessage: (messageData) => service.post('/messages', messageData),
// 删除留言
deleteMessage: (id) => service.delete(`/messages/${id}`)
}
export default service