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
|
/* eslint no-console: off */
const polka = require('polka');
const body = require('body-parser');
function start(host, port, handlers)
{
const server = polka();
server.use(body.json());
server.post('/auth/login', (req, res) => handle(req, res, handlers.login));
server.post('/auth/logout', (req, res) => handle(req, res, handlers.logout));
server.post('/graphql', (req, res) => handle(req, res, handlers.graphql));
return new Promise((resolve, reject) => {
server.listen(port, host, err => {
if (err) {
return reject(err);
}
return resolve();
})
});
}
function handle(req, res, handler)
{
handler(req.body, req.headers.token)
.then(result => respond(res, 200, result))
.catch(err => {
console.error('Error during request handling :');
console.error(err);
if (err.message) {
delete err.http;
respond(res, err.http || 500, err);
} else {
respond(res, 500, {
message: 'Internal error : ' + err
});
}
});
}
function respond(res, code, obj)
{
const data = JSON.stringify(obj);
const headers = {
'Content-Type': 'application/json; charset=utf-8',
'Content-Length': Buffer.byteLength(data)
};
res.writeHead(code, headers);
res.end(data);
}
module.exports = start;
|