Last active
January 7, 2020 14:46
-
-
Save amritghimire/b216acc64bcf90c3f46c99638c2421f2 to your computer and use it in GitHub Desktop.
Util and http service segregation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const {post} = =require('../utils/http'); | |
const {putToken, saveUser} = require('../utils/token'); | |
async function login(username, password){ | |
try{ | |
const response = await post('/login',{username, password}); | |
if(response.status === 201){ | |
// Login Successful. | |
putToken(response.data.token); | |
saveUser(response.data.user); | |
}else{ | |
// Handle incorrect password. | |
console.log(response.data.error); | |
} | |
}catch(e){ | |
// Handle network error or something like that. | |
console.log(e); | |
} | |
} | |
export default {login}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const axios = require('axios'); | |
const {baseUrl, endpoints} = require('../config'); // Change it accordingly | |
const { getToken } = require('../utils/token'); | |
const timeout = 1000; | |
const token = getToken(); | |
const headers = { | |
Authorization: `Bearer ${token}` | |
} | |
const request = axios.create({ | |
baseUrl, | |
timeout, | |
headers | |
}); | |
request.interceptors.response.use(function (response){ | |
if(response.status===401){ | |
window.location.href = endpoint.login || '/login'; // Redirect to login for 401 error. | |
} | |
}) | |
export const appendArgsToUrl = (url, queryParams) => { | |
const queryString = []; | |
Object.keys(queryParams).forEach(function(key) { | |
if (queryParams[key] !== null) { | |
queryString.push(`${key}=${encodeURIComponent(queryParams[key])}`); | |
} | |
}); | |
if (!queryString.length) { | |
return url; | |
} | |
return `${url}?${queryString.join('&')}`; | |
}; | |
function get(url, parameter,config){ | |
const finalUrl = appendArgsToUrl(url, parameter); | |
return request.get(finalUrl, config) | |
} | |
function post(url, data, config){ | |
return request.post(url, data, config); | |
} | |
function put(url, data, config){ | |
return request.put(url, data, config); | |
} | |
function remove(url, config){ | |
return request.delete(url, config); | |
} | |
function patch(url, data, config){ | |
return request.patch(url, data, config); | |
} | |
export default Object.freeze({get, post, put, remove, patch}) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
getToken(){ | |
return localStorage.getItem('secretToken') | |
}; | |
putToken(token){ | |
return localStorage.setItem('secretToken', token); | |
} | |
saveUser(user){ | |
return localStorage.setItem('user',JSON.stringify(user)); | |
} | |
getUser(user){ | |
return JSON.parse(localStorage.getItem('user')); | |
} | |
export default Object.freeze({getToken, putToken}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment