Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
bradtraversy committed Oct 25, 2019
0 parents commit d664ffb
Show file tree
Hide file tree
Showing 4 changed files with 369 additions and 0 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Axios Crash Course

> These are the files for the YouTube Axios crash course.
"start.js" is just the event listeners and empty functions. "main.js" is the completed code
44 changes: 44 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
crossorigin="anonymous"
/>
<title>Axios Crash Course</title>
</head>
<body>
<div class="container my-5">
<div class="text-center">
<h1 class="display-4 text-center mb-3">Axios Crash Course</h1>
<button class="btn btn-primary my-3" id="get">GET</button>
<button class="btn btn-info" id="post">POST</button>
<button class="btn btn-warning" id="update">PUT/PATCH</button>
<button class="btn btn-danger" id="delete">DELETE</button>
<button class="btn btn-secondary" id="sim">Sim Requests</button>
<button class="btn btn-secondary" id="headers">
Custom Headers
</button>
<button class="btn btn-secondary" id="transform">
Transform
</button>
<button class="btn btn-secondary" id="error">
Error Handling
</button>
<button class="btn btn-secondary" id="cancel">
Cancel
</button>
</div>
<hr />
<div id="res"></div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js"></script>
<script src="main.js"></script>
</body>
</html>
223 changes: 223 additions & 0 deletions main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
// AXIOS GLOBALS
axios.defaults.headers.common['X-Auth-Token'] =
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';

// GET REQUEST
function getTodos() {
// axios({
// method: 'get',
// url: 'https://jsonplaceholder.typicode.com/todos',
// params: {
// _limit: 5
// }
// })
// .then(res => showOutput(res))
// .catch(err => console.error(err));

axios
.get('https://jsonplaceholder.typicode.com/todos?_limit=5', {
timeout: 5000
})
.then(res => showOutput(res))
.catch(err => console.error(err));
}

// POST REQUEST
function addTodo() {
axios
.post('https://jsonplaceholder.typicode.com/todos', {
title: 'New Todo',
completed: false
})
.then(res => showOutput(res))
.catch(err => console.error(err));
}

// PUT/PATCH REQUEST
function updateTodo() {
axios
.patch('https://jsonplaceholder.typicode.com/todos/1', {
title: 'Updated Todo',
completed: true
})
.then(res => showOutput(res))
.catch(err => console.error(err));
}

// DELETE REQUEST
function removeTodo() {
axios
.delete('https://jsonplaceholder.typicode.com/todos/1')
.then(res => showOutput(res))
.catch(err => console.error(err));
}

// SIMULTANEOUS DATA
function getData() {
axios
.all([
axios.get('https://jsonplaceholder.typicode.com/todos?_limit=5'),
axios.get('https://jsonplaceholder.typicode.com/posts?_limit=5')
])
.then(axios.spread((todos, posts) => showOutput(posts)))
.catch(err => console.error(err));
}

// CUSTOM HEADERS
function customHeaders() {
const config = {
headers: {
'Content-Type': 'application/json',
Authorization: 'sometoken'
}
};

axios
.post(
'https://jsonplaceholder.typicode.com/todos',
{
title: 'New Todo',
completed: false
},
config
)
.then(res => showOutput(res))
.catch(err => console.error(err));
}

// TRANSFORMING REQUESTS & RESPONSES
function transformResponse() {
const options = {
method: 'post',
url: 'https://jsonplaceholder.typicode.com/todos',
data: {
title: 'Hello World'
},
transformResponse: axios.defaults.transformResponse.concat(data => {
data.title = data.title.toUpperCase();
return data;
})
};

axios(options).then(res => showOutput(res));
}

// ERROR HANDLING
function errorHandling() {
axios
.get('https://jsonplaceholder.typicode.com/todoss', {
// validateStatus: function(status) {
// return status < 500; // Reject only if status is greater or equal to 500
// }
})
.then(res => showOutput(res))
.catch(err => {
if (err.response) {
// Server responded with a status other than 200 range
console.log(err.response.data);
console.log(err.response.status);
console.log(err.response.headers);

if (err.response.status === 404) {
alert('Error: Page Not Found');
}
} else if (err.request) {
// Request was made but no response
console.error(err.request);
} else {
console.error(err.message);
}
});
}

// CANCEL TOKEN
function cancelToken() {
const source = axios.CancelToken.source();

axios
.get('https://jsonplaceholder.typicode.com/todos', {
cancelToken: source.token
})
.then(res => showOutput(res))
.catch(thrown => {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
}
});

if (true) {
source.cancel('Request canceled!');
}
}

// INTERCEPTING REQUESTS & RESPONSES
axios.interceptors.request.use(
config => {
console.log(
`${config.method.toUpperCase()} request sent to ${
config.url
} at ${new Date().getTime()}`
);

return config;
},
error => {
return Promise.reject(error);
}
);

// AXIOS INSTANCE
const axiosInstance = axios.create({
// Other custom settings
baseURL: 'https://jsonplaceholder.typicode.com'
});
// axiosInstance.get('/comments').then(res => showOutput(res));

// Show output in browser
function showOutput(res) {
document.getElementById('res').innerHTML = `
<div class="card card-body mb-4">
<h5>Status: ${res.status}</h5>
</div>
<div class="card mt-3">
<div class="card-header">
Headers
</div>
<div class="card-body">
<pre>${JSON.stringify(res.headers, null, 2)}</pre>
</div>
</div>
<div class="card mt-3">
<div class="card-header">
Data
</div>
<div class="card-body">
<pre>${JSON.stringify(res.data, null, 2)}</pre>
</div>
</div>
<div class="card mt-3">
<div class="card-header">
Config
</div>
<div class="card-body">
<pre>${JSON.stringify(res.config, null, 2)}</pre>
</div>
</div>
`;
}

// Event listeners
document.getElementById('get').addEventListener('click', getTodos);
document.getElementById('post').addEventListener('click', addTodo);
document.getElementById('update').addEventListener('click', updateTodo);
document.getElementById('delete').addEventListener('click', removeTodo);
document.getElementById('sim').addEventListener('click', getData);
document.getElementById('headers').addEventListener('click', customHeaders);
document
.getElementById('transform')
.addEventListener('click', transformResponse);
document.getElementById('error').addEventListener('click', errorHandling);
document.getElementById('cancel').addEventListener('click', cancelToken);
97 changes: 97 additions & 0 deletions start.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// GET REQUEST
function getTodos() {
console.log('GET Request');
}

// POST REQUEST
function addTodo() {
console.log('POST Request');
}

// PUT/PATCH REQUEST
function updateTodo() {
console.log('PUT/PATCH Request');
}

// DELETE REQUEST
function removeTodo() {
console.log('DELETE Request');
}

// SIMULTANEOUS DATA
function getData() {
console.log('Simultaneous Request');
}

// CUSTOM HEADERS
function customHeaders() {
console.log('Custom Headers');
}

// TRANSFORMING REQUESTS & RESPONSES
function transformResponse() {
console.log('Transform Response');
}

// ERROR HANDLING
function errorHandling() {
console.log('Error Handling');
}

// CANCEL TOKEN
function cancelToken() {
console.log('Cancel Token');
}

// INTERCEPTING REQUESTS & RESPONSES

// AXIOS INSTANCES

// Show output in browser
function showOutput(res) {
document.getElementById('res').innerHTML = `
<div class="card card-body mb-4">
<h5>Status: ${res.status}</h5>
</div>
<div class="card mt-3">
<div class="card-header">
Headers
</div>
<div class="card-body">
<pre>${JSON.stringify(res.headers, null, 2)}</pre>
</div>
</div>
<div class="card mt-3">
<div class="card-header">
Data
</div>
<div class="card-body">
<pre>${JSON.stringify(res.data, null, 2)}</pre>
</div>
</div>
<div class="card mt-3">
<div class="card-header">
Config
</div>
<div class="card-body">
<pre>${JSON.stringify(res.config, null, 2)}</pre>
</div>
</div>
`;
}

// Event listeners
document.getElementById('get').addEventListener('click', getTodos);
document.getElementById('post').addEventListener('click', addTodo);
document.getElementById('update').addEventListener('click', updateTodo);
document.getElementById('delete').addEventListener('click', removeTodo);
document.getElementById('sim').addEventListener('click', getData);
document.getElementById('headers').addEventListener('click', customHeaders);
document
.getElementById('transform')
.addEventListener('click', transformResponse);
document.getElementById('error').addEventListener('click', errorHandling);
document.getElementById('cancel').addEventListener('click', cancelToken);

0 comments on commit d664ffb

Please sign in to comment.