Serve html file with fs.readFileSync() fails

I have this code (https://gist.github.com/2402116) :

server.get('/', function(request, response) {
 var k = fs.readFileSync('./index.html','utf8');
 response.send( k );
});

Tries to read this file:

https://gist.github.com/2402070

and the browser keeps loading and never end.

But if I remove all the js includes from the html file works fine.

what am I doing wrong?

Your current server implementation does not do anything but serve index.html to requests for the base url, i.e. '/'. You will need to write further code/routes to serve the requests for the js includes in your index.html, i.e. '/app.js' and the various js files in '/js/'.

Now, the routing implementation in the gist is quite crude and doesn't support many aspects of url matching. The original code is clearly just demonstrating a concept for a single page site with no resources. You will see it will quickly become burdensome to get your code working as you will effectively have to write a route for every resource request, e.g.

server.get('/app.js', function(request, response) {
  var k = fs.readFileSync('./app.js','utf8');
  response.send( k );
});

server.get('/js/jquery-1.7.2.js', function(request, response) {
  var k = fs.readFileSync('./js/jquery-1.7.2.js','utf8');
  response.send( k );
});

etc...

You are better off looking at a node.js url routing library already out there (e.g. director) or a web framework such as express which has inbuilt support for routing (and static file serving).

You need a response.end() once you are done sending data to your browser.

Actually, since you are sending all of your data at once, you can just replace response.send(k) with response.end(k). Although this method is not recommended. I highly recommend reading your file asynchronously and sending it to the client chunk-by-chunk.

See also: http://nodejs.org/api/http.html#http_response_end_data_encoding

try .toString on k and not send but .end

response.end( k.toString() ); 

maybe some wierd things happens and he tries to eval the code