-
Notifications
You must be signed in to change notification settings - Fork 173
/
proxy.js
65 lines (54 loc) · 1.57 KB
/
proxy.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
const http = require("http");
const qs = require("qs");
const nba = require("..");
const statsHandler = createHandler("stats");
const synergyHandler = createHandler("synergy");
const sportVuHandler = createHandler("sportVu");
const server = http.createServer(async (req, res) => {
let [ path, query ] = req.url.split("?");
path = path.split("/").filter(Boolean);
query = qs.parse(query);
console.log("req.url:", path, query);
const namespace = path.shift();
const method = path.shift();
try {
switch (namespace) {
case "stats":
return await statsHandler(res, method, query);
case "synergy":
return await synergyHandler(res, method, query);
case "sportvu":
case "sportVu":
return await sportVuHandler(res, method, query);
default: {
res.writeHead(400);
res.end(`Invalid namespace: ${namespace}`);
return;
}
}
} catch (e) {
if (/Bad Request/.test(e)) {
res.writeHead(400);
} else {
res.writeHead(500);
}
res.end(e.message);
}
});
function createHandler (namespace) {
return async function (res, method, query) {
if (nba[namespace][method] == null) {
res.writeHead(400);
res.end(`Invalid ${namespace} method: ${method}`);
return;
}
const result = await nba[namespace][method](query);
res.writeHead(200);
res.end(JSON.stringify(result));
};
}
const port = process.env.PORT || 7799;
server.listen(port, () => {
console.log("server listening on", port);
});
process.on("unhandledRejection", (err) => { throw err; });