Узел-статический пример

Я бился головой о стену, пытаясь выяснить, что не так с этим кодом. Я скопировал его непосредственно из примера репозитория github-статического узла, но, похоже, он не работает. Единственное изменение, которое я сделал, - это путь к публичным файлам (ранее это был "./public"). В моей общей папке у меня есть index.html, но когда я нажимаю http://localhost:8080/index.html Я ничего не получаю.

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);

Если это имеет значение, я запускаю Node.js в Windows 7 64 бит.

Редактировать:

Я бросил в некоторых console.log заявления, и это превращает его в обработчик сервера, но не в обработчик слушателя. Может ли это быть как-то связано с событием "конец"?

2 ответа

Решение

Я удалил request.addListener('end', ...) функция:

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

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

}).listen(8080);

Теперь все отлично работает.

Я думаю, что у вас есть проблема с Windows. Я не могу проверить это на моей стороне, но я могу дать вам 2 варианта:

1) избежать обратной косой черты:

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

2) использовать path.join

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

__dirname путь к текущему файлу

Кроме того, вы также можете обслуживать страницу с ошибкой:

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);

файл 404.html должен существовать

Другие вопросы по тегам