-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
84 lines (58 loc) · 1.79 KB
/
app.js
File metadata and controls
84 lines (58 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import cors from 'cors';
import express from 'express';
import dotenv from 'dotenv';
import fetch from 'node-fetch';
import { createClient } from 'redis'
const app = express();
dotenv.config();
app.use(cors());
app.use(express.json());
const client = await createClient()
.on('error', err => console.log('Redis Client Error', err))
.connect();
//await client.set('simo', 'bakkali');
//const value = await client.get('simo');
//console.log(value);
// Create a Redis client
//const client = redis.createClient(process.env.REDIS_PORT);
// Set response
function setResponse(username, followers) {
return `<h2> Data retrieved: username ${username}, followers number: ${followers}</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 followers = data.followers;
// Set data to Redis (key, dateExpire, value)
await client.set(username, followers);
res.send(setResponse(username, followers));
} catch (err) {
console.error(err);
res.status(500).send('Internal Server Error');
}
}
// Cache middleware
async function cache(req,res,next){
try{
const {username } = req.params;
const data = await client.get(username);
if(data !== null){
res.send(setResponse(username, data));
}else{
next();
}
}catch(err){
next();
}
}
app.get('/repos/:username', cache , getRepos);
app.get('/',(req,res,next)=>{
res.status(200).send('Welcome to page home!')
})
app.listen(process.env.PORT, () => {
console.log(`Listening on port ${process.env.PORT}`);
});