-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
79 lines (68 loc) · 1.77 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
67
68
69
70
71
72
73
74
75
76
77
const { getController } = require('./trafficControl')
const { initial, attachBody } = require('formatrequest')
const { verify } = require('keykeeper')
const mapStaticContent = require('./mapStaticContent');
const staticContent = {};
let defaultRoutes;
const handleStaticContent = (req)=> {
if(staticContent && staticContent[req.url]) {
return staticContent[req.url];
} else {
return false;
}
}
const router = function(req, res) {
if(!verify(req)) {
res.writeHead(401);
return res.end('Hmm, try again?');
}
const formattedReq = initial(req);
const controller = getController(formattedReq);
if(!controller) {
let staticContent = handleStaticContent(req);
if (staticContent) {
res.writeHead(200, staticContent.headers || {});
return res.end(staticContent.body);
}
res.writeHead(404);
return res.end('Invalid Route');
}
let handleBody;
//We don't want to do default body data gathering
if(controller.streamBody) {
handleBody = controller.handler(formattedReq, req);
}
else {
//Want whole body at once
handleBody = attachBody(req, formattedReq)
.then(()=>{
return controller.handler(formattedReq);
})
}
return handleBody
.then(handlerRes => {
//If our handler needs to set headers
if(controller.headers) {
res.writeHead(200, handlerRes.headers);
res.write(handlerRes.body || "Ok");
return res.end();
}
if(typeof handlerRes === 'object') {
handlerRes = JSON.stringify(handlerRes);
}
res.writeHead(200);
res.write(handlerRes || "Ok");
res.end();
})
.catch(err => {
res.writeHead(400);
res.end(err.message);
});
}
router.setStaticContentMapping = (map) => {
mapStaticContent(map, staticContent);
}
router.getStaticFile = (name) => {
return staticContent[name]
}
module.exports = router;