4

I've been banging my head against the wall trying to figure out what's wrong with this code. I copied it directly from the node-static github repository example, but it doesn't seem to work. The only modification that I made was to the path of the public files (previously was './public'). In my public folder I have an index.html, but when I hit http://localhost:8080/index.html I get nothing.

var static = require('node-static');

//
// Create a node-static server instance to serve the './public' folder
//
var file = new(static.Server)('C:\Projects\node\public');

require('http').createServer(function (request, response) {
    request.addListener('end', function () {
        //
        // Serve files!
        //
        file.serve(request, response);
    });
}).listen(8080);

If it matters, I'm running Node.js on Windows 7 64 bit.

Edit:

I threw in some console.log statements and it makes it into the server handler, but not into the listener handler. Could this have something to do with the 'end' event?

Seth Moore
  • 3,575
  • 2
  • 23
  • 33
  • 2
    hmm, though it is solved... But removing addListener is probably not recommended. This piece of code should work well in node v0.8 or earlier. But 'end' event is not fired in node v0.10. Add `.resume()` to the end of handler binding like `request.addListener(...).resume()`. It will force node to fire end event. – Herrington Darkholme May 29 '13 at 05:25
  • https://github.com/cloudhead/node-static – Herrington Darkholme May 29 '13 at 05:25

3 Answers3

13

I removed the request.addListener('end', ...) function:

require('http').createServer(function (request, response) {

    //
    // Serve files!
    //
    file.serve(request, response);

}).listen(8080);

Now it works fine.

paul
  • 488
  • 5
  • 16
1

I think you have a windows path problem. I cannot verify it on my side but I can give you 2 options:

1) escape your backslashes:

'C:\\Projects\\node\\public'

2) use path.join

var path = require("path");
var file = new(static.Server)(path.join(__dirname, "public"));

__dirname is the path of the current file.

topek
  • 18,609
  • 3
  • 35
  • 43
0

In addition, you can also serve a error page:

let static = require('node-static');

let fileServer = new static.Server('C:\Projects\node\public');

require('http').createServer(function(request, response) {

  fileServer.serve(request, response, function(exception) {
    if (exception && (exception.status === 404)) {
      fileServer.serveFile('/404.html', 404, {}, request, response);
    }
  });

}).listen(8080);

file 404.html should exist