-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
66 lines (58 loc) · 1.68 KB
/
index.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
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const showdown = require('showdown');
const gloversController = require('./controllers/glovers-controller');
const fs = require('fs');
const INTERVIEW_ID_HEADER = 'interview-id';
const app = express();
const port = process.env.PORT || 8080;
const db = {};
app.use(cors());
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(
express.urlencoded({
// to support URL-encoded bodies
extended: true,
})
);
app.get('/', (req, res) => {
const markdownConverter = new showdown.Converter();
const readmeMarkdown = fs.readFileSync('./README.md', 'utf8');
const readmeHtml = markdownConverter.makeHtml(readmeMarkdown);
res.send(readmeHtml);
});
// Adds a "db" object to the request that is scoped by interview-id header
app.use((req, res, next) => {
const interviewId = req.headers[INTERVIEW_ID_HEADER];
if (!interviewId) {
throw new Error(`Require header '${INTERVIEW_ID_HEADER}'`);
}
if (!db[interviewId]) {
db[interviewId] = {
glovers: {},
};
}
req.db = db[interviewId];
next();
});
// instantiate controllers with the db
app.use((req, res, next) => {
req.controllers = {
glovers: gloversController(req.db)
};
next();
})
app.get('/glovers', (req, res) => {
res.json(req.controllers.glovers.list());
});
app.post('/glovers', (req, res) => {
res.json(req.controllers.glovers.add(req.body));
});
app.delete('/glovers/:id', (req, res) => {
res.json(req.controllers.glovers.delete(req.params.id));
});
app.listen(port, function () {
console.log(`CORS-enabled web server listening on port ${port}`);
});
module.exports = app