-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtiny-router.js
86 lines (66 loc) · 2.59 KB
/
tiny-router.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
78
79
80
81
82
83
84
85
86
var Session = require('./session.js');
var formidable = require('formidable'),
http = require('http'),
util = require('util');
var url = require('url');
var fs = require('fs');
var mime = require('mime');
class TinyRouter {
constructor() {
console.log("TinyRouter Created");
this.getRoutes = [];
this.postRoutes = [];
}
listen(port) {
var router = this;
try {
fs.mkdirSync('./temp/');
} catch (error) {
}
http.createServer(function (request, response) {
var req = url.parse(request.url, true);
// console.log('[INFO]\t\''+req.pathname+'\' requested');
Session.checkFile(request);
if (request.method == "GET" && router.getRoutes[req.pathname.toLowerCase()] != undefined) {
response.writeHead(200, { "Content-Type": "text/html" });
response.write(router.getRoutes[req.pathname.toLowerCase()](request, req.query));
response.end();
} else if (request.method == "POST" && router.postRoutes[req.pathname.toLowerCase()] != undefined) {
var form = new formidable.IncomingForm();
form.uploadDir = __dirname + "/temp";
form.parse(request, function (err, fields, files) {
response.writeHead(200, { 'content-type': 'text/plain' });
response.write(router.postRoutes[req.pathname.toLowerCase()](request, fields, files));
response.end();
});
} else {
var filepath = './public' + req.pathname;
if (fs.existsSync(filepath)) {
var type = mime.getType(filepath);
if (!response.getHeader('content-type')) {
response.setHeader('Content-Type', type);
response.write(fs.readFileSync(filepath));
response.end();
}
} else {
response.writeHead(404, "Page or Resource not found. 404");
response.end();
}
}
}).listen(port);
}
get(route, handler) {
this.getRoutes[route.toLowerCase()] = handler;
}
post(route, handler) {
this.postRoutes[route.toLowerCase()] = handler;
}
printRoutes() {
console.log('GET:');
console.log(this.getRoutes);
console.log('-------------------------------');
console.log('POST:');
console.log(this.postRoutes);
}
}
module.exports = TinyRouter;