From 487eda4b73fd59ed9adc61dd3978d40618bb5f20 Mon Sep 17 00:00:00 2001 From: leechan Date: Wed, 18 Dec 2024 14:13:45 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[Refactor]=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=A0=9C=EA=B1=B0,=20BASE=5FU?= =?UTF-8?q?RL=20export?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/http.api.ts | 49 +++----------------------------------------- 1 file changed, 3 insertions(+), 46 deletions(-) diff --git a/src/apis/http.api.ts b/src/apis/http.api.ts index fe233f9..66121c4 100644 --- a/src/apis/http.api.ts +++ b/src/apis/http.api.ts @@ -1,20 +1,9 @@ import axios, { AxiosRequestConfig } from 'axios'; -const BASE_URL = import.meta.env.VITE_API_BASE_URL; -const DEFAULT_TIMEOUT = 30000; // 요청 제한 시간 - -// 토큰 관리 함수 -function getToken(): string | null { - return localStorage.getItem('token'); -} - -function setToken(token: string) { - localStorage.setItem('token', token); -} +import { getToken, removeToken } from '@/utils/token'; -function removeToken() { - localStorage.removeItem('token'); -} +export const BASE_URL = import.meta.env.VITE_API_BASE_URL; +const DEFAULT_TIMEOUT = 30000; // 요청 제한 시간 export const createClient = (config?: AxiosRequestConfig) => { const token = getToken(); // 토큰 가져오기 @@ -61,35 +50,3 @@ export const createClient = (config?: AxiosRequestConfig) => { }; export const httpClient = createClient(); - -// 토큰 관련 함수 export -export { setToken, removeToken, getToken }; - -// 공통 요청 부분 - -type RequestMethod = 'get' | 'post' | 'put' | 'delete'; - -export const requestHandler = async ( - method: RequestMethod, - url: string, - payload?: T -) => { - let response; - - switch (method) { - case 'post': - response = await httpClient.post(url, payload); - break; - case 'get': - response = await httpClient.get(url); - break; - case 'put': - response = await httpClient.put(url, payload); - break; - case 'delete': - response = await httpClient.delete(url); - break; - } - - return response.data; -}; From daf20de990f8f771f1a96dd7c5ed60b0693c73ae Mon Sep 17 00:00:00 2001 From: leechan Date: Wed, 18 Dec 2024 14:14:00 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[Refactor]=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=A3=BC=EC=84=9D=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Header.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/Header.tsx b/src/components/Header.tsx index b31e1f2..5264699 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -7,7 +7,7 @@ const Header = () => { const navigate = useNavigate(); const handleLogoClick = () => { - navigate('/'); // 메인 페이지로 이동 + navigate('/'); }; return ( @@ -38,7 +38,6 @@ const HeaderWrapper = styled.div` justify-content: space-between; `; -// 클릭 가능한 스타일을 추가한 로고 const Logo = styled.img` - cursor: pointer; // 커서를 클릭 가능한 손가락 모양으로 변경 + cursor: pointer; `; From b8e657f1b107aae52a90640982559c056e2dff57 Mon Sep 17 00:00:00 2001 From: leechan Date: Wed, 18 Dec 2024 14:14:25 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[Refactor]=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=A3=BC=EC=84=9D=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/MenuButton.tsx | 13 +++++-------- src/pages/JoinPage.tsx | 8 ++++---- src/pages/LoginPage.tsx | 2 -- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/components/MenuButton.tsx b/src/components/MenuButton.tsx index 02705db..807a178 100644 --- a/src/components/MenuButton.tsx +++ b/src/components/MenuButton.tsx @@ -7,7 +7,7 @@ import { useNavigate } from 'react-router'; import { logout } from '@/hooks/userSlice'; import { useSelector, useDispatch } from 'react-redux'; import { RootState } from '@/store/rootReducer'; -import { removeToken } from '@/apis/http.api'; +import { removeToken } from '@/utils/token'; const MenuButton = () => { const [isOpen, setIsOpen] = useState(false); @@ -17,17 +17,17 @@ const MenuButton = () => { const role = useSelector((state: RootState) => state.user.userInfo?.role); const handleMyPage = () => { - setIsOpen(false); // 드롭다운 먼저 닫기 + setIsOpen(false); navigate('/mypage'); }; const handleAdminPage = () => { - setIsOpen(false); // 드롭다운 먼저 닫기 + setIsOpen(false); navigate('/adminpage'); }; const handleLogin = () => { - setIsOpen(false); // 드롭다운 먼저 닫기 + setIsOpen(false); navigate('/login'); }; @@ -48,7 +48,6 @@ const MenuButton = () => { return ( - {/* 햄버거 버튼 */} - {/* 드롭다운 메뉴 */} {isOpen && (
  • { - setIsOpen(false); // 드롭다운 먼저 닫기 + setIsOpen(false); if (isLoggedIn) { role === 'admin' ? navigate('/adminpage') @@ -73,7 +71,6 @@ const MenuButton = () => { } }} > - {/* 아바타 표시 */} (); - const password = watch('password'); // PasswordGuideLines에서 실시간 사용 + const password = watch('password'); const onSubmit = async (data: JoinProps) => { setIsLoading(true); try { - await join(data); // 회원가입 요청 + await join(data); alert('회원가입이 완료되었습니다!'); - navigate('/login'); // 로그인 페이지로 이동 + navigate('/login'); } catch (error: any) { console.error('회원가입 중 에러 발생:', error); if (error.response?.data?.message) { - alert(error.response.data.message); // 서버에서 반환된 에러 메시지 표시 + alert(error.response.data.message); } else { alert('회원가입에 실패했습니다. 다시 시도해주세요.'); } diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx index f418c29..0c1c3ca 100644 --- a/src/pages/LoginPage.tsx +++ b/src/pages/LoginPage.tsx @@ -38,8 +38,6 @@ function LoginPage() { } }; - // 로그인 상태 확인 후 리다이렉트 처리 - return ( From ca6dacfb3b8f0767777d111c08366562faab6f09 Mon Sep 17 00:00:00 2001 From: leechan Date: Wed, 18 Dec 2024 14:14:48 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[Refactor]=20BASE=5FURL=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=EC=95=A4=EB=93=9C=ED=8F=AC?= =?UTF-8?q?=EC=9D=B8=ED=8A=B8=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/userSlice.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/hooks/userSlice.ts b/src/hooks/userSlice.ts index 4a5b8f4..ef9bd3f 100644 --- a/src/hooks/userSlice.ts +++ b/src/hooks/userSlice.ts @@ -3,6 +3,7 @@ import { DecodedToken, UserInfo, UserState } from '@/types/auth'; import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit'; import axios from 'axios'; import { jwtDecode } from 'jwt-decode'; +import { BASE_URL } from '@/apis/http.api'; const initialState: UserState = { isLoggedIn: false, @@ -12,7 +13,6 @@ const initialState: UserState = { error: null, }; -// 실제 서버에 로그인 요청을 보내고 토큰을 받아오는 thunk export const loginAsync = createAsyncThunk( 'user/loginAsync', async ( @@ -20,13 +20,10 @@ export const loginAsync = createAsyncThunk( { rejectWithValue } ) => { try { - const response = await axios.post( - 'http://localhost:3333/api/users/login', - { - email, - password, - } - ); + const response = await axios.post(`${BASE_URL}/api/users/login`, { + email, + password, + }); if (response.data.success && response.data.token) { return response.data.token; From ac2c7102aafbd6184b673bf7a3777f17bad47146 Mon Sep 17 00:00:00 2001 From: leechan Date: Wed, 18 Dec 2024 14:16:39 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[Refactor]=20const=20->=20function=20?= =?UTF-8?q?=EC=9D=98=EB=AF=B8=EC=9E=88=EB=8A=94=20=EB=B3=80=ED=99=94=20x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/token.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/utils/token.ts b/src/utils/token.ts index 025f9ed..99a666a 100644 --- a/src/utils/token.ts +++ b/src/utils/token.ts @@ -1,12 +1,11 @@ -// 로컬스토리지에서 토큰 가져오기 -export const getToken = (): string | null => { +export function getToken(): string | null { return localStorage.getItem('token'); -}; +} -export const setToken = (token: string) => { +export function setToken(token: string) { localStorage.setItem('token', token); -}; +} -export const removeToken = () => { +export function removeToken() { localStorage.removeItem('token'); -}; +}