В предыдущей лекции
мы узнали об основах сетевого взаимодействия, включая детали протокола HTTP.
Теперь мы рассмотрим, как Node может быть использован для создания HTTP-сервера.
Здесь нам на помощь приходит основной HTTP-модуль, который встроен в Node.
Кроме того, мы рассмотрим пару других основных модулей Node, которые полезны для
построения HTTP-сервера с помощью Node.
Итак, как мы используем модуль HTTP Node?
Как я уже упоминал, модуль HTTP является одним из основных модулей, которые встроены в узел.
Таким образом, это основной сетевой модуль, который поддерживает
высокопроизводительный фундамент для стека HTTP.
Таким образом, использование модуля в нашем приложении Node требует
от нас импорта модуля в наше приложение.
Так что это то, что мы делаем, говоря const HTTP = require и,
имя модуля HTTP там.
Теперь, как только модуль импортирован,
то этот HTTP-модуль поддерживает функцию CreateServer, которая принимает в
качестве параметра функцию, которая действует как
функция обратного вызова для модуля CreateServer, и
эта функция имеет два параметра: запрос и ответ.
Запрос - это сообщение запроса, которое приходит со
стороны клиента, и мы можем проанализировать сообщение запроса, а затем извлечь
много информации из сообщения запроса и использовать его для
принятия решений о том, как мы создаем ответное сообщение, соответствующее этому.
Сообщение ответа строится с использованием второго параметра здесь, res,
на котором мы можем построить различные значения заголовка для
нашего сообщения ответа HTTP, а также тела сообщения ответа HTTP.
Теперь, чтобы запустить сервер,
как только вы создаете сервер,
вы скажете server.listen, а затем укажите номер порта
и имя хоста для сервера, и это запустит наш сервер.
Мы рассмотрим некоторые детали в упражнении на примерах, которое следует за этой лекцией.
Как я уже упоминал, информация о входящем сообщении запроса доступна
через параметр req, который функция принимает в методе CreateServer.
Итак, req или request,
если вы хотите дать ему полное имя,
вы можете назвать его как запрос, но в целом мы обнаружили, что в
примерах мы использовали req для представления сообщения запроса.
Он поддерживает свойства объекта Javascript, такие как заголовок,
тело, а также различную информацию, которая может быть извлечена,
URL-адрес и метод, который был запрошен этим сайтом клиента.
И, в ответ, вы строите ответ, используя
объект Javascript ответа, который поддерживает эту функцию SetHeader,
функцию StatusCode, которая может быть установлена в код состояния сообщения ответа.
И тогда вы напишете сообщение, говорящее
res.write, и вы закончите сообщение, сказав
res.end, и это занимает последнюю часть тела для сообщения.
Тело может быть либо стандартный текст, либо HTML, либо
любая другая информация, которую вы хотите поместить в тело этого ответного сообщения.
Но как только res.end
вызывается, ответ отправляется обратно клиенту с HTTP-сервера.
Два других основных модуля, которые полезны для нас,
когда мы создаем сервер Node HTTP, является модулем Node path.
Модуль path позволяет нам указать путь к файлу, а затем
проверить, существует ли файл или изучить более подробную информацию о файле.
Например, расширение файла,
имя и так далее.
Таким образом, модуль пути может быть использован в
нашем приложении, требуя модуль пути, как показано здесь.
И затем, это поддерживает методы,
такие как, например, path.resolve,
который преобразует относительный путь в
абсолютный путь, который весь путь к файлу.
Вы также можете проверить имя расширения файла, вызвав
функцию path.extname и укажите путь к файлу, который
изучит расширение имени файла.
Аналогично, модуль файловой системы,
опять же основной модуль в узле,
позволит нам читать и записывать
файлы, которые существуют в локальной файловой системе на компьютере.
Таким образом, модули файловой системы могут быть использованы в
нашем приложении Node, требуя его, как показано здесь.
И затем эти модули файловой системы поддерживают множество методов
, включая метод проверки того, существует ли файл в локальной файловой системе или нет.
Таким образом, fs.exists будет принимать
FilePath в качестве первого параметра, а второй параметр -
функция обратного вызова, которая вернется с параметром, который мы можем назвать его как существует.
Этот параметр существует, будет истинным, если файл
существует, и будет ложным, если файл не существует в локальной файловой системе.
Аналогично, вы можете читать из файла, создав поток чтения с учетом пути к файлу.
Таким образом, вы можете сказать fs.createReadStream
и FilePath, и это может быть передано в ответное сообщение.
Таким образом, файл будет прочитан из файла,
заданного FilePath, а затем содержимое будет
помещено в тело ответного сообщения, вызвав цепную функцию, как показано здесь.
Итак, это несколько примеров некоторых основных модулей Node, которые будут очень
полезны, когда мы создаем HTTP-сервер с помощью Node.
Теперь, когда мы понимаем некоторые детали о HTTP-сервере и как он может быть построен,
давайте перейдем к упражнению,
где мы построим простой Node HTTP-сервер, который сначала будет обслуживать
некоторую основную информацию, а затем мы будем обслуживать файлы
, которые существуют в общей папке в наш проект.