86 lines
2.0 KiB
JavaScript
86 lines
2.0 KiB
JavaScript
// /public/js/api-helper.js
|
|
|
|
// API 기본 URL 설정
|
|
const API_BASE = location.hostname.includes('localhost')
|
|
? 'http://localhost:3005/api'
|
|
: 'https://api.hyungi.net/api';
|
|
|
|
// 인증된 fetch 함수
|
|
async function authFetch(url, options = {}) {
|
|
const token = localStorage.getItem('token');
|
|
|
|
if (!token) {
|
|
console.error('토큰이 없습니다. 로그인이 필요합니다.');
|
|
window.location.href = '/index.html';
|
|
return;
|
|
}
|
|
|
|
const defaultHeaders = {
|
|
'Authorization': `Bearer ${token}`,
|
|
'Content-Type': 'application/json'
|
|
};
|
|
|
|
const response = await fetch(url, {
|
|
...options,
|
|
headers: {
|
|
...defaultHeaders,
|
|
...options.headers
|
|
}
|
|
});
|
|
|
|
// 401 에러 시 로그인 페이지로
|
|
if (response.status === 401) {
|
|
console.error('인증 실패. 다시 로그인해주세요.');
|
|
localStorage.removeItem('token');
|
|
window.location.href = '/index.html';
|
|
return;
|
|
}
|
|
|
|
return response;
|
|
}
|
|
|
|
// GET 요청 헬퍼
|
|
async function apiGet(endpoint) {
|
|
const response = await authFetch(`${API_BASE}${endpoint}`);
|
|
if (!response) return null;
|
|
return response.json();
|
|
}
|
|
|
|
// POST 요청 헬퍼
|
|
async function apiPost(endpoint, data) {
|
|
const response = await authFetch(`${API_BASE}${endpoint}`, {
|
|
method: 'POST',
|
|
body: JSON.stringify(data)
|
|
});
|
|
if (!response) return null;
|
|
return response.json();
|
|
}
|
|
|
|
// PUT 요청 헬퍼
|
|
async function apiPut(endpoint, data) {
|
|
const response = await authFetch(`${API_BASE}${endpoint}`, {
|
|
method: 'PUT',
|
|
body: JSON.stringify(data)
|
|
});
|
|
if (!response) return null;
|
|
return response.json();
|
|
}
|
|
|
|
// DELETE 요청 헬퍼
|
|
async function apiDelete(endpoint) {
|
|
const response = await authFetch(`${API_BASE}${endpoint}`, {
|
|
method: 'DELETE'
|
|
});
|
|
if (!response) return null;
|
|
return response.json();
|
|
}
|
|
|
|
// 내보내기 (다른 파일에서 사용 가능)
|
|
window.API = {
|
|
get: apiGet,
|
|
post: apiPost,
|
|
put: apiPut,
|
|
delete: apiDelete,
|
|
fetch: authFetch,
|
|
BASE: API_BASE
|
|
}; |