File tree Expand file tree Collapse file tree 6 files changed +66
-6
lines changed
Expand file tree Collapse file tree 6 files changed +66
-6
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change 1- export default {
1+ module . exports = {
22 products : [
33 {
44 _id : '1' ,
Original file line number Diff line number Diff line change 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+ } ) ;
Original file line number Diff line number Diff 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} ;
2020window . addEventListener ( 'load' , router ) ;
2121window . addEventListener ( 'hashchange' , router ) ;
Original file line number Diff line number Diff line change 1- import data from '../data.js' ;
21const 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
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments