diff --git a/index.js b/index.js index 60d74c5..43d2f38 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,8 @@ const path = require("path"); const express = require("express"); const app = express(); const fetch = require("node-fetch"); +const NodeCache = require("node-cache"); +const myCache = new NodeCache(); const { check, validationResult } = require("express-validator"); const bodyParser = require("body-parser"); app.use(bodyParser.urlencoded({ extended: false })); @@ -41,7 +43,7 @@ app.get("/", async (req, res) => { app.get("/create", async (req, res) => { try { - pokemons = await getAllPokemons(); + let pokemons = await getAllPokemons(); res.render("create", { pokemons }); } catch (err) { console.error(err); @@ -163,9 +165,14 @@ app.get("/archive", async (req, res) => { async function fetchPokemon(pokemon) { try { - const res = await fetch(`https://pokeapi.co/api/v2/pokemon/${pokemon}`); - const data = await res.json(); - return data; + if (myCache.has(pokemon)) { + return myCache.get(pokemon); + } else { + const res = await fetch(`https://pokeapi.co/api/v2/pokemon/${pokemon}`); + const data = await res.json(); + myCache.set(pokemon, data, 3600); + return data; + } } catch (err) { console.log(err); } @@ -173,9 +180,14 @@ async function fetchPokemon(pokemon) { async function getAllPokemons() { try { - const res = await fetch(`https://pokeapi.co/api/v2/pokemon?limit=898`); - const data = await res.json(); - return data; + if (myCache.has("allPokemons")) { + return myCache.get("allPokemons"); + } else { + const res = await fetch(`https://pokeapi.co/api/v2/pokemon?limit=898`); + const data = await res.json(); + myCache.set("allPokemons", data, 3600); + return data; + } } catch (err) { console.log(err); } diff --git a/package-lock.json b/package-lock.json index f8e0029..65a9cce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1100,6 +1100,11 @@ "readdirp": "~3.6.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1527,6 +1532,14 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "requires": { + "clone": "2.x" + } + }, "node-fetch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.0.0.tgz", diff --git a/package.json b/package.json index 03e56ad..c8bd5aa 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "express": "^4.18.2", "express-validator": "^6.14.2", "mongodb": "^4.12.1", + "node-cache": "^5.1.2", "node-fetch": "^2.0.0" }, "devDependencies": {