-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweb.js
More file actions
122 lines (99 loc) · 2.3 KB
/
Copy pathweb.js
File metadata and controls
122 lines (99 loc) · 2.3 KB
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
120
121
122
var PORT = 5000;
var http = require('http');
var url = require('url');
var querystring = require('querystring');
var bins = {};
var emptyBin = {
'key': '',
'date': '',
'data': '{ "message" : "no bin found" }'
};
var generateKey = function () {
var max = Math.pow(16, 8);
var min = Math.pow(16, 7);
var keyNumber = Math.floor(Math.random() * (max - min)) + min;
var keyHex = keyNumber.toString(16);
if (!bins.hasOwnProperty(keyHex)) {
return keyHex;
}
return generateKey();
};
var addBin = function (data) {
if (!data){
data = '';
}
var key = generateKey();
var newBin = {
'key': key,
'date': Date.now(),
'data': data
};
bins[key] = newBin;
return newBin;
};
var getBin = function (key) {
if ( bins.hasOwnProperty(key) ) {
return bins[key];
} else {
return emptyBin;
}
};
var respond = function (response, message){
response.writeHead(200, { 'content-type' : 'text/plain' });
response.end(message + '\n');
};
var s = http.createServer();
s.on('request', function (request, response){
var message;
var urlParts = url.parse(request.url);
var bin, key, property;
console.log(request.method);
switch (request.method) {
case "POST":
bin = addBin();
message = "access at http://jsonbin.herokuapp.com/" + bin.key;
respond(response, message);
break;
case "PUT":
key = urlParts.pathname.substr(1);
bin = getBin(key);
if (bin === emptyBin) {
message = bin.data;
respond(response, message);
break;
}
var data = '';
request.on('data', function (chunk) {
data += chunk;
});
request.on('end', function () {
var post = querystring.parse(data);
bin.data = JSON.stringify(post);
message = bin.data;
respond(response, message);
});
break;
case "GET":
if (urlParts.pathname === "/all") {
message = 'All\n';
for(property in bins) {
if(bins.hasOwnProperty(property)) {
bin = bins[property];
message += 'key: ' + bin.key + '\n' + 'data: ' + bin.data + '\n\n';
}
}
respond(response, message);
break;
}
key = urlParts.pathname.substr(1);
bin = getBin(key);
message = bin.data;
respond(response, message);
break;
default:
message = "no action specified/n";
respond(response, message);
break;
}
});
s.listen(process.env.PORT || PORT);