forked from JakeChampion/fetch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
executable file
·119 lines (114 loc) · 3.11 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/usr/bin/env node
var port = Number(process.argv[2] || 3000)
var fs = require('fs')
var http = require('http');
var url = require('url');
var querystring = require('querystring');
var routes = {
'/request': function(res, req) {
res.writeHead(200, {'Content-Type': 'application/json'});
var data = ''
req.on('data', function(c) { data += c })
req.on('end', function() {
res.end(JSON.stringify({
method: req.method,
url: req.url,
headers: req.headers,
data: data
}));
})
},
'/hello': function(res, req) {
res.writeHead(200, {
'Content-Type': 'text/plain',
'X-Request-URL': 'http://' + req.headers.host + req.url
});
res.end('hi');
},
'/redirect/301': function(res) {
res.writeHead(301, {'Location': '/hello'});
res.end();
},
'/redirect/302': function(res) {
res.writeHead(302, {'Location': '/hello'});
res.end();
},
'/redirect/303': function(res) {
res.writeHead(303, {'Location': '/hello'});
res.end();
},
'/redirect/307': function(res) {
res.writeHead(307, {'Location': '/hello'});
res.end();
},
'/redirect/308': function(res) {
res.writeHead(308, {'Location': '/hello'});
res.end();
},
'/boom': function(res) {
res.writeHead(500, {'Content-Type': 'text/plain'});
res.end('boom');
},
'/empty': function(res) {
res.writeHead(204);
res.end();
},
'/error': function(res) {
res.destroy();
},
'/form': function(res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('number=1&space=one+two&empty=&encoded=a%2Bb&');
},
'/json': function(res) {
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({name: 'Hubot', login: 'hubot'}));
},
'/json-error': function(res) {
res.writeHead(200, {'Content-Type': 'application/json'});
res.end('not json {');
},
'/cookie': function(res, req) {
var setCookie, cookie
var params = querystring.parse(url.parse(req.url).query);
if (params.value && params.value) {
setCookie = [params.name, params.value].join('=');
}
if (params.name) {
cookie = querystring.parse(req.headers['cookie'], '; ')[params.name];
}
res.writeHead(200, {'Content-Type': 'text/plain', 'Set-Cookie': setCookie});
res.end(cookie);
},
'/headers': function(res) {
res.writeHead(200, {
'Date': 'Mon, 13 Oct 2014 21:02:27 GMT',
'Content-Type': 'text/html; charset=utf-8'
});
res.end();
}
};
var types = {
js: 'application/javascript',
css: 'text/css',
html: 'text/html',
txt: 'text/plain'
};
http.createServer(function(req, res) {
var pathname = url.parse(req.url).pathname;
var route = routes[pathname];
if (route) {
route(res, req);
} else {
fs.readFile(__dirname + '/..' + pathname, function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': types.txt});
res.end('Not Found');
} else {
var ext = (pathname.match(/\.([^\/]+)$/) || [])[1]
res.writeHead(200, {'Content-Type': types[ext] || types.txt});
res.end(data);
}
});
}
}).listen(port);