Skip to content

Commit ad6d3b1

Browse files
authored
Video 07 load products from backend (basir#6)
* Video-06-Create-NodeJS-Server * Video-07-Load-Products-From-Backend
1 parent 09a2cb5 commit ad6d3b1

File tree

6 files changed

+66
-6
lines changed

6 files changed

+66
-6
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,19 @@ JS AMAZONA
4949
8. build parsedUrl and compare with routes
5050
9. if route exists render it, else render Error404
5151
10. create screens/Error404.js and render error message
52+
6. Create Node.JS Server
53+
1. run npm init in root jsamazona folder
54+
2. npm install express
55+
3. create server.js
56+
4. add start command as node backend/server.js
57+
5. require express
58+
6. move data.js from frontend to backend
59+
7. create route for /api/products
60+
8. return products in data.js
61+
9. run npm start
62+
7. Load Products From Backend
63+
1. edit HomeScreen.js
64+
2. make render async
65+
3. fetch products from '/api/products' in render()
66+
4. make router() async and call await HomeScreen.render()
67+
5. use cors on backend
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default {
1+
module.exports = {
22
products: [
33
{
44
_id: '1',

backend/server.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const express = require('express');
2+
const cors = require('cors');
3+
const data = require('./data.js');
4+
const app = express();
5+
app.use(cors());
6+
app.get('/api/products', (req, res) => {
7+
res.send(data.products);
8+
});
9+
10+
app.listen(5000, () => {
11+
console.log('serve at http://localhost:5000');
12+
});

frontend/src/app.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const routes = {
66
'/': HomeScreen,
77
'/product/:id': ProductScreen,
88
};
9-
const router = () => {
9+
const router = async () => {
1010
const request = parseRequestUrl();
1111
const parseUrl =
1212
(request.resource ? `/${request.resource}` : '/') +
@@ -15,7 +15,7 @@ const router = () => {
1515
const screen = routes[parseUrl] ? routes[parseUrl] : Error404Screen;
1616

1717
const main = document.getElementById('main-container');
18-
main.innerHTML = screen.render();
18+
main.innerHTML = await screen.render();
1919
};
2020
window.addEventListener('load', router);
2121
window.addEventListener('hashchange', router);

frontend/src/srceens/HomeScreen.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1-
import data from '../data.js';
21
const HomeScreen = {
3-
render: () => {
4-
const { products } = data;
2+
render: async () => {
3+
const response = await fetch('http://localhost:5000/api/products', {
4+
headers: {
5+
'Content-Type': 'application/json',
6+
},
7+
});
8+
if (!response || !response.ok) {
9+
return `<div>Error in getting data</div>`;
10+
}
11+
const products = await response.json();
12+
513
return `
614
<ul class="products">
715
${products

package.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "jsamazona",
3+
"version": "1.0.0",
4+
"description": "JS AMAZONA",
5+
"main": "index.js",
6+
"scripts": {
7+
"start": "node backend/server.js",
8+
"test": "echo \"Error: no test specified\" && exit 1"
9+
},
10+
"repository": {
11+
"type": "git",
12+
"url": "git+https://github.com/basir/node-javascript-ecommerce.git"
13+
},
14+
"author": "",
15+
"license": "ISC",
16+
"bugs": {
17+
"url": "https://github.com/basir/node-javascript-ecommerce/issues"
18+
},
19+
"homepage": "https://github.com/basir/node-javascript-ecommerce#readme",
20+
"dependencies": {
21+
"cors": "^2.8.5",
22+
"express": "^4.17.1"
23+
}
24+
}

0 commit comments

Comments
 (0)