Загрузка изображений, CSS и JS файлов через NodeJS

В статье "Роутинг в NodeJS" был описан способ создания простейшего роутинга в приложении на NodeJS. В этой статье будет доработан предыдущий пример, чтобы выводить изображения, подключить CSS и JavaScript файлы, которые будут выполняться в браузере пользователя.

Проблема в том, что стандартного роутинга (как в nginx или apache) в NodeJS нет, его необходимо запрограммировать. То есть если ввести в адресной строке браузера ссылку на изображение, то страница начнёт бесконечно загружаться:
https://адрес_сайта.ru/img.png
Потому что в нашем коде ещё не запрограммирована отдача страницы с "Content-Type" равным "image/png". Аналогично и с CSS и JavaScript файлами, которые подключаются для работы в браузере пользователя. Поэтому вспомним код нашего приложения:
let http = require('http');
let fs = require('fs');
http.createServer(function(request, response) {
   fs.readFile('pages/' + request.url, (error, fileContent) => {
      response.setHeader('Content-Type' : 'text/html');

      if (!error) { // страница существует
         response.statusCode = 200;
         response.write(fileContent);
         response.end();
      } else { // страница не найдена
         fs.readFile('pages/404.html', (error404, fileContent404) => {
            if(error404) throw error404;
            response.statusCode = 404;
            response.write(fileContent404);
            response.end();
         });
      }
   });
}).listen(80);
Приступим к модификации JS кода приложения. Основная проблема в том, что при запросе к файлу на него выдаётся один и тот же "Content-Type" равный "text/html". Запрограммируем изменение этого заголовка в зависимости от выдаваемого файла с помощью метода "endsWith", который определяет есть ли в конце строки искомая фраза. Получится так:
let http = require('http');
let fs = require('fs');
http.createServer(function(request, response) {
   fs.readFile('pages/' + request.url, (error, fileContent) => {
      let contentType = 'text/html';
      if (request.url.endsWith('.css')) contentType = 'text/css';
      if (request.url.endsWith('.js')) contentType = 'text/javascript';
      if (request.url.endsWith('.png')) contentType = 'image/png'; 

      response.setHeader('Content-Type' : contentType);

      if (!error) { // страница существует
         response.statusCode = 200;
         response.write(fileContent);
         response.end();
      } else { // страница не найдена
         fs.readFile('pages/404.html', (error404, fileContent404) => {
            if(error404) throw error404;
            response.statusCode = 404;
            response.write(fileContent404);
            response.end();
         });
      }
   });
}).listen(80);
Остаётся только прописать подключение JS, CSS и файлов изображений в HTML коде страниц. Помимо перечисленных в примере "MIME"-типов для изображений можно добавить следующие:
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб