Узел-статический пример
Я бился головой о стену, пытаясь выяснить, что не так с этим кодом. Я скопировал его непосредственно из примера репозитория 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
должен существовать