Skip to content

Instantly share code, notes, and snippets.

@JaysonChiang
Last active May 24, 2023 13:02
Show Gist options
  • Save JaysonChiang/b5e95f0958b9218af59d0321f21e2419 to your computer and use it in GitHub Desktop.
Save JaysonChiang/b5e95f0958b9218af59d0321f21e2419 to your computer and use it in GitHub Desktop.
optimize api.js
import axios from 'axios';
import { token } from './somewhere';
axios.defaults.baseURL = 'https://jsonplaceholder.typicode.com';
axios.interceptors.request.use((config) => {
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
axios.interceptors.response.use(res => res
, error => {
const { data, status, config } = error.response;
switch(status) {
case 400:
console.error(data);
break;
case 401:
console.error('unauthorised');
break;
case 404:
console.error('/not-found');
break;
case 500:
console.error('/server-error');
break;
}
return Promise.reject(error);
})
const responseBody = response => response.data;
const request = {
get: url => axios.get(url).then(responseBody),
post: (url, body) => axios.post(url, body).then(responseBody)
}
const todos = {
list: () => request.get('/todos'),
details: (id) => request.get(`/todos/${id}`),
create: (data) => request.post('/todos', data)
}
const users = {
list: () => request.get('/users'),
details: (id) => request.get(`/users/${id}`),
create: (data) => request.post('/users', data)
}
const api = {
todos,
users
}
export default api;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment