From a7742e9ac28bd7c448ba85a7f2c97ac050fce9b9 Mon Sep 17 00:00:00 2001 From: Sulaiman Date: Thu, 18 Apr 2024 12:22:09 +0500 Subject: [PATCH 1/2] Update items get api --- server/app.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/app.js b/server/app.js index 64a17b4..1335d67 100644 --- a/server/app.js +++ b/server/app.js @@ -8,7 +8,6 @@ const path = require("path"); const scrapeDynamicWebpage = require("./scrapers/dynamincSiteScraper"); const scrapeStaticWebpage = require("./scrapers/staticSiteScraper"); -// const data = require("./data/itemsData.json"); var folder = "./data"; @@ -26,11 +25,11 @@ app.get("/api/v1/items", function (req, res) { console.error(err); res.status(500).send(err); } else { - let data = {}; + let data = []; files.forEach((file) => { const filePath = path.join("./data", file); const fileData = JSON.parse(fs.readFileSync(filePath, "utf8")); - data[file] = fileData; + data = data.concat(fileData); }); res.json(data); } From aa2da64ba94404139336208d659584d623bf39b9 Mon Sep 17 00:00:00 2001 From: Sulaiman Date: Thu, 18 Apr 2024 12:28:11 +0500 Subject: [PATCH 2/2] Integrate the items api on client side to show scraped items --- client/src/App.css | 42 --------------------------- client/src/App.jsx | 52 +++++++++++++++------------------ client/src/index.css | 69 -------------------------------------------- 3 files changed, 23 insertions(+), 140 deletions(-) diff --git a/client/src/App.css b/client/src/App.css index b9d355d..e69de29 100644 --- a/client/src/App.css +++ b/client/src/App.css @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/client/src/App.jsx b/client/src/App.jsx index b8b8473..008d679 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -1,35 +1,29 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' +import { useEffect, useState } from "react"; +import "./App.css"; function App() { - const [count, setCount] = useState(0) + const [data, setData] = useState(null); + + useEffect(() => { + fetch("http://localhost:8000/api/v1/items") + .then((response) => response.json()) + .then((data) => setData(data)) + .catch((error) => console.error("Error:", error)); + }, []); return ( - <> -
- - Vite logo - - - React logo - -
-

Vite + React

-
- -

- Edit src/App.jsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- - ) +
+

React Node Web Scraper

+ {data && + data.map((item, index) => ( +
+

{item.name}

+ {item.name} +

{item.price}

+
+ ))} +
+ ); } -export default App +export default App; diff --git a/client/src/index.css b/client/src/index.css index 2c3fac6..e69de29 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -1,69 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -}