-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
69 lines (54 loc) · 1.65 KB
/
server.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
'use strict';
const http = require('http');
const url = require('url');
const qs = require('querystring');
const Router = require('./class/router');
function responseError(res, error){
res.writeHead(error, {'Content-Type': 'application/json'});
res.end(JSON.stringify({
code: error,
error: http.STATUS_CODES[error]
}));
}
function response(res, promise){
res.writeHead(200, {'Content-Type': 'application/json'});
promise.then((body) => {
res.end(JSON.stringify(body));
});
}
const server = http.createServer((req, res) => {
const reqUrl = url.parse(req.url);
const query = (reqUrl.query)?qs.parse(reqUrl.query):null;
const path = reqUrl.pathname.split('/');
const method = req.method.toLowerCase();
console.log();
console.log(`[${req.method}]`, reqUrl.pathname);
const router = new Router(method, path, query);
//data
if (method === 'post') {
let body = '';
req.on('data', (data)=>{
body += data;
if (body.length > 1e6)
req.connection.destroy();
});
req.on('end', ()=>{
console.log('body: ', body);
const result = router.route(body);
(result.error)?
responseError(res, result.error):
response(res, result.promise);
});
}
else {
console.log('query: ', query);
const result = router.route();
(result.error)?
responseError(res, result.error):
response(res, result.promise);
}
});
server.on('clientError', (err, socket) => {
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
server.listen(5000);