Почему браузер продолжает загружаться при использовании функции createReadStream () Node.js - PullRequest
0 голосов
/ 04 октября 2018

Новое в Node.js. Я понимаю, что функция createReadStream() лучше по производительности, чем readFile(), потому что createReadStream() читает и записывает данные в чанках, в то время как readFile() сначала читает весь контент.Таким образом, если файл большой, функция readFile() может занять больше времени, прежде чем данные могут быть обработаны в дальнейшем.Таким образом, я выбираю создание сервера с использованием функции createReadStream() следующим образом.

// Create a server with fs.createReadStream(), better performance and less memory usage.
http.createServer( function (request, response) {
  // Parse the request containing file name
  var pathname = url.parse(request.url).pathname;

  // Create a readable stream.
  var readerStream = fs.createReadStream(pathname.substr(1));

  // Set the encoding to be UTF8.
  readerStream.setEncoding('UTF8');

  // Handle stream events --> data, end and error
  readerStream.on('data', function(chunk) {
    // Page found
    // HTTP Status: 200 : OK
    // Content Type: text/plain
    response.writeHead(200, {'Content-type': 'text/html'});

    // Write the content of the file to response body.
    response.write(chunk);

    console.log('Page is being streamed...');
  });

  readerStream.on('end', function() {
    console.log('Page is streamed and emitted successfully.');
  });

  readerStream.on('error', function(err) {
    // HTTP Status: 404 : NOT FOUND
    // Content Type: text/plain
    response.writeHead(404, {'Content-type': 'text/html'});

    console.log('Page streaming error: ' + err);
  });

  console.log('Code ends!');

}).listen(8081);

// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

Мой .html или .txt файл содержит три короткие строки текста.После запуска моего сервера я захожу на свою веб-страницу, зайдя на http://127.0.0.1:8081/index.html.Все работает нормально, и содержимое index.html отображается в браузере.

Но на вкладке браузера значок загрузчика продолжает вращаться, как будто он загружается в течение приблизительно 1 минуты.

Это нормально для сервера Node.js?Значок только продолжает вращаться, но ничего не стоит серверу?Или я что-то пропускаю, а значок не должен вращаться?

1 Ответ

0 голосов
/ 04 октября 2018

Не похоже, что вы заканчиваете свой ответ.Браузер, вероятно, думает, что запрос не завершен, и поэтому продолжает «загружаться».

Если вы посмотрите на вкладку Сеть в консоли разработчика, то увидите, что запрос еще не завершен.

Вы должны отправить response.end ()

Этот метод сообщает серверу, что все заголовки и тело ответа отправлены;этот сервер должен считать это сообщение завершенным.НЕОБХОДИМО, чтобы метод response.end () вызывался при каждом ответе.

Я полагаю, что вы должны вызывать response.end() в обратных вызовах readerStream.on('end' и readerStream.on('error' после того, как вы напишете заголовок,Это сообщит браузеру, что запрос завершен, и может остановить действие загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...