diff options
author | 2025-04-29 10:47:43 +0530 | |
---|---|---|
committer | 2025-04-29 10:47:43 +0530 | |
commit | a2e0a65b2599267efe94d665d6305f59b225bbd5 (patch) | |
tree | e2cef2031e3f7655e0c5f419020a3f1064c3b7b8 /frontend/src/lib/api/index.js | |
parent | 570bf0f3f065d583d6f94ecfc61aae93ba3e43de (diff) | |
download | restaurant-master.tar.gz restaurant-master.tar.bz2 restaurant-master.zip |
Diffstat (limited to 'frontend/src/lib/api/index.js')
-rw-r--r-- | frontend/src/lib/api/index.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/frontend/src/lib/api/index.js b/frontend/src/lib/api/index.js new file mode 100644 index 0000000..dca56e3 --- /dev/null +++ b/frontend/src/lib/api/index.js @@ -0,0 +1,40 @@ +import axios from 'axios'; + +const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:5000/api'; + +const api = axios.create({ + baseURL: API_URL, + headers: { + 'Content-Type': 'application/json', + }, +}); + +// Request interceptor to add authorization header +api.interceptors.request.use( + (config) => { + const token = localStorage.getItem('token'); + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; + }, + (error) => Promise.reject(error) +); + +// Response interceptor to handle errors +api.interceptors.response.use( + (response) => response, + (error) => { + // Handle 401 unauthorized errors + if (error.response && error.response.status === 401) { + localStorage.removeItem('token'); + localStorage.removeItem('user'); + if (typeof window !== 'undefined') { + window.location.href = '/login'; + } + } + return Promise.reject(error); + } +); + +export default api;
\ No newline at end of file |