2012-04-16 3 views
1

У меня есть этот код (https://gist.github.com/2402116):Подавать HTML файл с fs.readFileSync() терпит неудачу

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

пытается прочитать этот файл:

https://gist.github.com/2402070

и браузер не держит нагрузку и никогда не конец.

Но если я удалю все js includes из html-файла, отлично работает.

что я делаю неправильно?

+0

Что делает ваш файл «app.js»? Кажется, вы сузили его до чего-то в этом коде, нет? – maerics

+0

app.js имеет все интерфейсные логики. Я думаю, что это связано с кодировкой в ​​то время, когда она пытается отправить данные файла в браузер. – escusado

+0

Вы можете использовать инструмент профилирования в инструментах разработчика вашего браузера, чтобы увидеть, куда он попадает - выполнение сценариев, сеть, рендеринг и т. Д. – jimw

ответ

2

Ваш current server implementation ничего не делает но подают index.html запросам на базовый url, то есть '/'. Вам нужно будет написать дополнительный код/​​маршруты для обслуживания запросов для js, включенных в ваш index.html, то есть '/app.js' и различные js-файлы в '/js/'.

Теперь реализация маршрутизации в сущности довольно грубая и не поддерживает многие аспекты соответствия URL. Исходный код явно просто демонстрирует концепцию для одного сайта страницы без каких-либо ресурсов. Вы увидите, что это быстро станет обременительным, чтобы заставить ваш код работать, так как вам будет эффективно писать маршрут для каждого запроса ресурса, например.

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... 

Вы лучше смотрите на Node.js библиотеки URL маршрутизации уже там (например, director) или веб-фреймворк, такие как express, который имеет встроенную поддержку routing (и статические обслуживание файлы).

1

После того, как вы закончите отправку данных в свой браузер, вам понадобится response.end().

Фактически, поскольку вы отправляете все свои данные за один раз, вы можете просто заменить response.send(k) на response.end(k). Хотя этот метод не рекомендуется. Я настоятельно рекомендую прочитать ваш асинхронный файл и отправить его клиенту по куску.

Смотрите также: http://nodejs.org/api/http.html#http_response_end_data_encoding

+0

Если вы посмотрите на первый gist 'send' - это специальная реализация, которая включает' end() '. –

1

попробовать .toString по к и не посылать, но .end

response.end(k.toString()); 

может быть, некоторые странные вещи происходит, и он пытается Eval Кодекса

Смежные вопросы