https://www.w3schools.com/js/js_cookies.asp
쿠키는 새로운 쿠키를 추가한다고 해서 이전 쿠키가 지워지는 것이 아니고 쌓인다.
https://github.com/axios/axios#global-axios-defaults
export interface AxiosResponse<T = any, D = any> {
data: T;
status: number;
statusText: string;
headers: RawAxiosResponseHeaders | AxiosResponseHeaders;
config: InternalAxiosRequestConfig<D>;
request?: any;
}
const BASE_API_URL = 'https://www.pre-onboarding-selection-task.shop'
const TOKEN_KEY_STR = 'access_token'
const withBearer = (tokenStr: string) => `Bearer ${tokenStr}`
export const axiosInstance = axios.create({
baseURL: BASE_API_URL,
headers: {
'Content-Type': 'application/json',
},
})
axios.interceptors.request.use(function (config) {
const token = localStorage.getItem(TOKEN_KEY_STR)
if (token !== null) config.headers.Authorization = withBearer(token)
return config
})
export const api = {
get: <T>(url: string, config?: AxiosRequestConfig) =>
axiosInstance.get<T>(url, config),
post: <T, D>(url: string, data: D, config?: AxiosRequestConfig) =>
axiosInstance.post<T>(url, data, config),
}
axiosInstance.get, post 등등은 AxiosResponse객체를 리턴한다.
AxiosReponse는 <T,D>타입의 제네릭을 받을 수 있는데, T는 AxiosResponse.data의 타입이다.
서버에서 우리에게 주는 특정 데이터들은 AxiosResponse.data에 담겨서 온다.
axiosInstance.post는 3개의 제네릭 타입을 받는다. 첫 번째는 T=> AxiosResponse.data의 타입이다.
그래서 axiosInstance.post<T>
를 하면 AxiosReponse<T,any>
타입의 결과를 리턴하게 된다.
아하...그렇군.