Skip to content

Instantly share code, notes, and snippets.

@PaulChelaru
Forked from bradtraversy/node_redis_cache.js
Created June 30, 2021 16:02
Show Gist options
  • Select an option

  • Save PaulChelaru/a34eac1f2ec57e577d1e44b8267238a3 to your computer and use it in GitHub Desktop.

Select an option

Save PaulChelaru/a34eac1f2ec57e577d1e44b8267238a3 to your computer and use it in GitHub Desktop.

Revisions

  1. @bradtraversy bradtraversy created this gist Aug 20, 2019.
    59 changes: 59 additions & 0 deletions node_redis_cache.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    const express = require('express');
    const fetch = require('node-fetch');
    const redis = require('redis');

    const PORT = process.env.PORT || 5000;
    const REDIS_PORT = process.env.PORT || 6379;

    const client = redis.createClient(REDIS_PORT);

    const app = express();

    // Set response
    function setResponse(username, repos) {
    return `<h2>${username} has ${repos} Github repos</h2>`;
    }

    // Make request to Github for data
    async function getRepos(req, res, next) {
    try {
    console.log('Fetching Data...');

    const { username } = req.params;

    const response = await fetch(`https://api.github.com/users/${username}`);

    const data = await response.json();

    const repos = data.public_repos;

    // Set data to Redis
    client.setex(username, 3600, repos);

    res.send(setResponse(username, repos));
    } catch (err) {
    console.error(err);
    res.status(500);
    }
    }

    // Cache middleware
    function cache(req, res, next) {
    const { username } = req.params;

    client.get(username, (err, data) => {
    if (err) throw err;

    if (data !== null) {
    res.send(setResponse(username, data));
    } else {
    next();
    }
    });
    }

    app.get('/repos/:username', cache, getRepos);

    app.listen(5000, () => {
    console.log(`App listening on port ${PORT}`);
    });