-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
129 lines (113 loc) · 2.91 KB
/
app.js
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*Native Node modules*/
const https = require("https");
/*EJS modules*/
const ejs = require("ejs");
/*Express modules*/
const express = require("express");
const bodyParser = require("body-parser");
/*Environment Variables*/
const PORT = process.env.PORT || 3000;
const PATH = __dirname;
const PATH_PUBLIC = PATH + "/public";
const CATEGORY_URI = "https://api.chucknorris.io/jokes/categories";
const JOKE_URI = "https://api.chucknorris.io/jokes/random?category=";
/*Express middleware settings*/
const app = express();
app.use(bodyParser.json());
app.use(express.static(PATH_PUBLIC));
app.set("view engine", "ejs");
/*GET request for page load*/
app.get("/", (req, res) => {
var session = {
cat: null,
res: res,
};
getCat(session);
});
app.get("/chuck", (req, res) => {
if (!req.query) {
res.send("Bad luck Chuck!");
return;
}
var session = {
joke: null,
cat: req.query.category,
res: res,
};
getJoke(session);
});
function getCat(session) {
var data = [];
https
.get(CATEGORY_URI, (resAPI) => {
resAPI
.on("data", (chunk) => {
data.push(chunk);
})
.once("error", (err) => {
console.log("API GET Data Error");
console.log(err);
end(session, false);
});
resAPI.on("end", () => {
session.cat = JSON.parse(data);
session.cat.forEach((cat, i) => {
cat = cat.split("");
cat[0] = cat[0].toUpperCase();
cat = cat.join("");
session.cat[i] = cat;
});
end(session, true, "cat");
});
})
.on("error", (err) => {
console.log("HTTPS GET Error");
console.log(err);
end(session, false);
});
}
function getJoke(session) {
https
.get(JOKE_URI + session.cat.toLowerCase(), (resAPI) => {
var data = [];
resAPI
.on("data", (chunk) => {
data.push(chunk);
})
.once("error", (err) => {
console.log("API GET Data Error");
console.log(err);
end(session, false);
});
resAPI.on("end", () => {
session.joke = JSON.parse(data).value;
end(session, true, "joke");
});
})
.on("error", (err) => {
console.log("HTTPS GET Error");
console.log(err);
end(session, false);
});
}
function end(session, ok, type) {
if (ok) {
switch (type) {
case "cat":
session.res.render("index", {
cat: session.cat,
joke: null,
});
break;
case "joke":
console.log(session.joke);
session.res.render("index", {
joke: session.joke,
cat: session.cat,
});
}
} else session.res.send("There was an error. Bad luck Chuck!");
}
app.listen(PORT, () => {
console.log("Listening on port " + PORT);
});