-
-
Save shimondoodkin/528064 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
It looks like there is a problem with http | |
If I define the on end and on data callbacks (too late) - like | |
after like 120 ms (like after all data is transfered) | |
it does not calls the callbacks (on data, on end). | |
or maybe because it is clousre inside a clousre, | |
the request object looks okay, but it does not fire the events, | |
the request is not done, | |
because the response.end is called in request.on(end) event that is not called, | |
after a minute it fails because of browser timeout | |
*/ | |
function log(str) | |
{ | |
mylog+=str+"\r\n"; | |
//console.log(str); | |
var http = require('http'), | |
url = require('url'), | |
mylog="log:\r\n"; | |
function log(str) { | |
// console.log and sys.inspect are slow, they fails even the okay_case | |
mylog += str + "\r\n"; | |
} | |
var server = http.createServer(function (request, response) { | |
switch (url.parse(request.url).pathname) { | |
case '/': | |
show_form(); | |
break; | |
case '/log': | |
show_log(); | |
break; | |
case '/clearlog': | |
reset_log(); | |
break; | |
case '/okay_case': | |
okay_case(); | |
break; | |
case '/failing_case': | |
failing_case(); | |
break; | |
default: | |
show_request(); | |
break; | |
} | |
function okay_case() { | |
log("okay_case - request(just before): "); | |
setTimeout(function() { | |
log('method: '+request.method); | |
if(request.method=='POST') { | |
log("okay_case - method POST , just define events"); | |
var data=''; | |
request.on('data', function(chunk) { | |
log("okay_case - on data : "+chunk.length); data += chunk; | |
}); | |
request.on('end', function() { | |
log("okay_case - on end"); | |
response.writeHead(200, { 'Content-Type': 'text/html'}); | |
response.write("okay_case - posted data: "+data); | |
response.end(); | |
}); | |
log("okay_case - method POST , end define events"); | |
} else { | |
log("okay_case - method GET"); | |
response.writeHead(200, { 'Content-Type': 'text/html'}); | |
response.write('okay_case - method GET'); | |
response.end(); | |
} | |
},2); | |
} | |
function failing_case() { | |
log("failing_case - request(just before): "); | |
setTimeout(function() { | |
log('method: '+request.method); | |
if(request.method=='POST') { | |
log("failing_case - method POST , just define events"); | |
var data=''; | |
request.on('data', function(chunk) { | |
log("failing_case - on data : "+chunk.length); data += chunk; | |
}); | |
request.on('end', function() { | |
log("failing_case - on end"); | |
response.writeHead(200, { 'Content-Type': 'text/html'}); | |
response.write("failing_case - posted data: "+data); | |
response.end(); | |
}); | |
log("failing_case - method POST , end define events"); | |
} else { | |
log("failing_case - method GET"); | |
response.writeHead(200, { 'Content-Type': 'text/html'}); | |
response.write('failing_case - method GET'); | |
response.end(); | |
} | |
},50); | |
} | |
function show_form() { | |
response.writeHead(200, {'Content-Type': 'text/html'}); | |
response.write( | |
'<form action="/okay_case" method="POST">' + | |
'choose file: <input type="file" name="upload-file"><br>' + | |
'enter some text: <input type="text" name="description"><br>' + | |
'<input type="submit" value="Okay">' + | |
'</form>'+ | |
'<form action="/failing_case" method="POST">' + | |
'choose file: <input type="file" name="upload-file"><br>' + | |
'enter some text: <input type="text" name="description"><br>' + | |
'<input type="submit" value="Will Fail">' + | |
'</form> <br><br> <a href="/log">log</a>, <a href="/clearlog">clear log</a>' | |
); | |
response.end(); | |
} | |
function show_log() { | |
response.writeHead(200, {'Content-Type': 'text/plain'}); | |
response.write( mylog ); | |
response.end(); | |
} | |
function show_request() { | |
response.writeHead(200, {'Content-Type': 'text/plain'}); | |
response.write( "the url is: "+url.parse(request.url).pathname ); | |
response.end(); | |
} | |
function reset_log() { | |
mylog=""; | |
response.writeHead(200, {'Content-Type': 'text/plain'}); | |
response.write( "log cleared" ); | |
response.end(); | |
} | |
}); | |
var old_emit = server.emit; | |
server.emit = function custom_emit() { | |
log(arguments); | |
return old_emit.apply(this, arguments); | |
}; | |
server.listen(8124); | |
console.log('Server running at http://127.0.0.1:8124/'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment