Skip to content

Commit 236d392

Browse files
committed
Update middleware exercise
1 parent 67bb635 commit 236d392

5 files changed

Lines changed: 1061 additions & 0 deletions

File tree

‎middlewareExercise/.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules/
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
2+
import express from "express";
3+
4+
const app = express();
5+
6+
const usernameMiddleware = (req, res, next) => {
7+
req.username = req.get("X-Username") || null;
8+
next();
9+
};
10+
11+
const validateBodyMiddleware = (req, res, next) => {
12+
if (!Array.isArray(req.body)) {
13+
return res.status(400).send("Body must be a JSON array");
14+
}
15+
16+
for (const subject of req.body) {
17+
if (typeof subject !== "string") {
18+
return res
19+
.status(400)
20+
.send("All array items must be strings");
21+
}
22+
}
23+
24+
next();
25+
};
26+
27+
app.use(express.json());
28+
app.use(usernameMiddleware);
29+
app.use(validateBodyMiddleware);
30+
31+
app.post("/", (req, res) => {
32+
let authMessage;
33+
34+
if (req.username) {
35+
authMessage =
36+
`You are authenticated as ${req.username}.`;
37+
} else {
38+
authMessage =
39+
"You are not authenticated.";
40+
}
41+
42+
const requestedSubjects = req.body;
43+
const subjectCount = requestedSubjects.length;
44+
45+
let responseMessage =
46+
`You have requested information about ${subjectCount} subject`;
47+
48+
if (subjectCount !== 1) {
49+
responseMessage += "s";
50+
}
51+
52+
if (subjectCount > 0) {
53+
responseMessage += `: ${requestedSubjects.join(", ")}`;
54+
}
55+
56+
responseMessage += ".";
57+
58+
res.send(
59+
`${authMessage}\n\n${responseMessage}\n`
60+
);
61+
});
62+
63+
app.listen(3000, () => {
64+
console.log("Server running on port 3000");
65+
});

0 commit comments

Comments
 (0)