Seth Moore
Seth Moore

Reputation: 3545

Node-static example

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?

Upvotes: 4

Views: 6210

Answers (3)

user8280225
user8280225

Reputation:

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

Upvotes: 0

paul
paul

Reputation: 488

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.

Upvotes: 13

topek
topek

Reputation: 18979

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.

Upvotes: 1

Related Questions