-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathecho-server.js
113 lines (94 loc) · 2.8 KB
/
echo-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
// From http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
var HTTP_STATUS_MESSAGES = {
100: "Continue",
101: "Switching Protocols",
200: "OK",
201: "Created",
202: "Accepted",
203: "Non-Authoritative Information",
204: "No Content",
205: "Reset Content",
206: "Partial Content",
300: "Multiple Choices",
301: "Moved Permanently",
302: "Found",
303: "See Other",
304: "Not Modified",
305: "Use Proxy",
307: "Temporary Redirect",
400: "Bad Request",
401: "Unauthorized",
402: "Payment Required",
403: "Forbidden",
404: "Not Found",
405: "Method Not Allowed",
406: "Not Acceptable",
407: "Proxy Authentication Required",
408: "Request Timeout",
409: "Conflict",
410: "Gone",
411: "Length Required",
412: "Precondition Failed",
413: "Request Entity Too Large",
414: "Request-URI Too Long",
415: "Unsupported Media Type",
416: "Requested Range Not Satisfiable",
417: "Expectation Failed",
500: "Internal Server Error",
501: "Not Implemented",
502: "Bad Gateway",
503: "Service Unavailable",
504: "Gateway Timeout",
505: "HTTP Version Not Supported"
};
var mimeType = {
".js" : "text/javascript"
, ".css" : "text/css"
, ".html" : "text/html"
, ".jpg" : "image/jpg"
, ".png" : "image/png"
, ".ico" : "image/vnd.microsoft.icon"
}
var port = 8081;
var fs = require('fs');
var url = require("url");
require('http').createServer(function (request, response) {
if ( request.url.indexOf("/echo") == 0 ) {
var json = { method : request.method, url : request.url };
response.writeHead(200, HTTP_STATUS_MESSAGES[200], { 'Content-Type': 'application/json', 'Cache-Control' : 'no-cache' });
if ( request.method == "POST" || request.method == "PUT" || request.method == "PATCH" ) {
request.on('data', function (chunk) {
json.data = chunk.toString();
response.end( JSON.stringify(json) );
});
} else {
response.end( JSON.stringify(json) );
}
} else {
var pathname = url.parse(request.url).pathname;
if ( !pathname || pathname=="/" || pathname.length<3) {
response.writeHead(302, {
'Location': "test/iris.html"
});
response.end();
}
var ext = pathname.lastIndexOf(".")>-1 ? pathname.substring( pathname.lastIndexOf(".") ) : "";
response.writeHead(200, HTTP_STATUS_MESSAGES[200], {'Content-Type': mimeType[ext]});
try {
fs.readFile(
"./" + pathname
, function(p_err, p_data) {
if ( p_err ) {
response.writeHead(404, HTTP_STATUS_MESSAGES[404]);
response.end();
} else {
response.end( p_data );
}
}
);
} catch(p_err){
console.log("Error");
}
}
}).listen(port);
console.log('Server running at http://localhost:' + port + '/');