[MUSIC]
В этом упражнении мы рассмотрим некоторые из модулей кода Node.
В частности, мы рассмотрим модуль HTTP, который встроен в Node и
использовать HTTP-модуль для настройки и запуска простого веб-сервера.
Мы также рассмотрим, как мы можем обслуживать статические файлы с нашего сервера Node HTTP.
Мы также рассмотрим этот модуль файловой системы и модуль пути и
как они могут помочь нам обслуживать статические файлы на нашем сервере HTTP на основе узла.
Итак, давайте рассмотрим некоторые из модулей кода Node в этом упражнении.
Чтобы начать работу с этим упражнением, перейдите в удобное место на компьютере.
Поэтому мы перейдем в папку NodeJS, которую мы уже создали в одном из
предыдущих упражнений.
И в папке NodeJS я собираюсь создать новую папку с именем node-http.
И затем, мы установим это как приложение Node.
Кроме того, перейдя в папку node-http,
давайте создадим подпапку там с именем public, которая будет продолжать
некоторые из html-файлов, которые мы будем сервера из нашего приложения Node HTTP.
Теперь перейдем к терминалу, перейдите к узлу,
-http папка.
И давайте инициализируем эту папку, чтобы быть в нашем приложении.
Поэтому мы начнем с npm init и
инициализируем этот пакет в наш JSON-файл здесь.
И тогда мы дадим имя пакета как node-http и
принимаем стандартную версию, а
описание - Node HTTP Module Example.
И отправной точкой является index.js, без тестовой команды,
без репозитория git на данный момент и автор,
введите свое имя и принимайте остальное как есть.
И это должно создать пакет для файла манифеста JSON.
Теперь давайте откроем этот проект в нашем любимом редакторе.
Поэтому позвольте мне запустить мой код Visual Studio в этой папке.
И в коде Visual Studio, давайте перейдем к пакету в наш JSON-файл.
И тогда мы добавим в другой скрипт к пакету, в
наш JSON-файл под названием start и
который будет выполнять индекс узла.
И не забудьте поставить запятую после тестовой зацепки.
И сохраните изменения в файле package.json.
Теперь, где Project,
создайте новый файл с именем index.js.
Мы собираемся настроить этот index.js для использования модуля Node HTTP.
Поэтому в этом файле, давайте напечатаем const
http = require («http»).
Таким образом, вы можете видеть, что мы используем модуль кода HTTP, и
мы требуем его, просто указав имя модуля кода HTTP там.
Кроме того, давайте объявим,
Пара констант здесь и затем,
Мы будем называть имя хоста и
номер порта как 3000 по умолчанию.
Теперь давайте настроим сервер.
Чтобы настроить сервер, мы скажем const server = http.
Модуль HTTP поддерживает метод CreateServer,
поэтому они будут использовать метод CreateServer для этого.
Этот метод CreateServer будет принимать функцию в качестве параметра, и
эта функция принимает два
значения в качестве параметров, запрос и ответ.
И, как вы можете видеть, я пишу функцию стрелки здесь.
Таким образом, запрос и ответ являются двумя параметрами функции, которую мы предоставляем
в качестве параметра для метода CreateServer здесь.
И внутри этого мы скажем
console.log (req.headers).
Итак, здесь req и res являются входящим HTTP-запросом на сервер.
И они своего рода нерест объект ответа, который
будет построен этим сервером и возвращен клиенту,
который подключается к этому HTTP-серверу, который мы создаем здесь.
Таким образом, запрос является входящий запрос из любого браузера или
из любого места, которое пытается получить доступ к этому серверу, который мы собираемся запустить
с помощью этого приложения HTTP Node, которое мы разрабатываем здесь.
Таким образом, из запроса
объект запроса дает нам доступ к заголовкам во входящем HTTP-запросе.
Поэтому я собираюсь записать входящие
заголовки HTTP-запроса, поступающие с помощью этого console.log.
Просто для моей информации, просто чтобы знать, откуда исходит этот запрос.
После этого мы можем построить ответ, используя res, и
это предоставит нам метод под названием StatusCode.
StatusCode позволит нам настроить StatusCode для ответного сообщения.
Поэтому в этом случае я настрою StatusCode как 200.
Если вы вспомните о предыдущих обсуждениях необходимости создания сетей,
вы будете знать, что StatusCode 200 означает, что все в порядке.
Итак, мы настроим код состояния здесь для ответного сообщения, а
затем мы также настроим заголовок для ответного сообщения.
И один из заголовков опасается, что мы
собираемся настроить называется Content-Type.
И Content-Type,
мы будем указывать это как «text/html».
Таким образом, тело ответа будет содержать данные в виде html здесь.
Таким образом, заголовок настраивается, чтобы информировать клиента о том, что вы отправляете
ответ, а тело отформатировано в формате html.
И тогда, наконец, мы скажем res.end (').
Таким образом, это заканчивается ответ здесь, и когда это будет сделано,
эта информация будет отправлена обратно клиенту.
Поэтому здесь, позвольте мне просто построить встраиваемую html-страницу здесь,
поэтому я скажу <Hello,
World! .
И закройте тег h1, тег body
и html-тег прямо там.
И это действительный HTML-ответ, который
можно отправить обратно с нашего сервера здесь.
Таким образом, этот сервер, как вы ожидаете, просто собирается отправить привет мир клиенту.
Так что теперь, когда мы настроили сервер, нам нужно запустить этот сервер.
Чтобы запустить этот сервер в примечании,
мы должны сказать server.listen.
И это запустит прослушивающий порт, на котором сервер будет прослушивать
входящие запросы.
И это будет начато с номера порта, заданного моим портом,
который мы установили уже здесь, в константном порту.
И второй параметр - это имя хоста, которое мы уже установили ранее.
И третий параметр - это функция, которая будет
выполняться при запуске сервера.
В этой функции мы просто идем, чтобы распечатать информацию о сервере.
Поэтому здесь я просто скажу console.log.
И в console.log
я собираюсь распечатать информацию, поэтому я буду использовать обратную цитату.
Поэтому обратите внимание на использование обратной цитаты, а не обычной цитаты.
Причина, по которой мы используем это, заключается в том, что мы будем использовать
некоторые переменные внутри строки, которую мы собираемся построить здесь.
Итак, скажем, сервер работает на http://.
И тогда мы скажем $, а
затем имя Хоста.
Напомним, что это имя хоста, вы уже объявили ранее.
А потом вторая часть,
скажем: $ и порт.
Таким образом, эти два значения будут заменены соответствующими значениями.
И так как мы вкладываем это в задние цитаты.
И если вы включите что-то внутри доллара поднимает,
это будет заменено на его значение в этой строке здесь.
Вот оно.
У нас есть простой HTTP-сервер и работает.
Так что давайте сохраним изменения в этом.
И мы пойдем и запустим наше приложение и посмотрим, что оно служит.
Перейдя к терминалу, давайте напечатаем npm start, и
это должно запустить наше приложение.
И мы заметили, что он печатает нашу поговорку, что сервер работает
на http://localhost:3000.
Теперь вы можете получить доступ к этому URL-адресу, введя его в адресную строку любого браузера.
Поэтому позвольте мне запустить окно браузера Chrome, а затем ввести это и
посмотреть, что вернет сервер.
Запуск нового окна.
Позвольте мне просто ввести http://
localhost: 3000.
И это должно вернуть Hello World, как мы ожидаем.
Теперь, когда мы идем на консоль, вы видите, что на консоли
здесь печатаются детали заголовка входящих запросов.
Некоторые вещи очень легко найти здесь.
Таким образом, это хост, локальный хост: 3000, и вы также видите, что «user-agent»
установлен на «Chrome» здесь, версия Chrome, которую я использую здесь.
Так что это интересная иллюстрация сообщения HTTP-запроса.
И то, что содержится в заголовке сообщения запроса, которое пришло сюда.
Так интересно наблюдать, что ваш север
распечатывает на экране здесь.
Этим мы завершаем первую половину этого упражнения.
Теперь мы можем инициализировать это приложение в репозиторий Git,
а затем сохранить изменения в репозитории Git.
Так что давайте продолжим и сделаем это дальше.
При типе подсказки получить init, и это инициализировало репозиторий.
И тогда мы скажем статус git, и вы увидите, что эти два файла являются новыми.
Поэтому мы скажем git add.
И сделайте git commit
-m «Узел HTTP Пример 1".
А затем проверьте это в нашем репозитории Git.
Теперь еще один инструмент, который очень полезен,
когда мы смотрим на серверные приложения называется Postman.
Теперь Postman поставляется в виде расширения браузера Chrome или
автономного инструмента, который вы можете скачать и установить на вашем компьютере.
Поэтому, чтобы сделать это, в нашем браузере напечатаем http.
getpostman.com.
И тогда вы можете получить
инструмент Postman для вашей конкретной ОС и установить его.
Инструмент Почтальон позволяет создавать HTTP-запросы, а затем отправлять их.
И это также дает вам гибкость настройки заголовков для
вашего HTTP-запроса перед отправкой его.
И затем, когда ответ возвращается, вы можете проверить ответ,
включая заголовки ответа, который возвращается со стороны сервера.
Так что я нахожу почтальона очень полезным.
Есть несколько других инструментов, как это,
но Почтальон, кажется, лучший на рынке на данный момент.
Так что я собираюсь использовать почтальона на протяжении остальной части этого курса.
Если вы не хотите устанавливать его,
вы также можете установить расширение браузера Chrome Postman, а затем использовать его.
Я собираюсь загрузить версию MacOS Postman, а
затем установить ее на свою машину, а затем использовать ее.
После установки Postman, либо автономной версии, либо
расширения браузера Chrome, вы можете запустить его.
И вы увидите, что пользовательский интерфейс более или менее одинаков
как для стандартной версии, так и для расширения браузера Chrome.
И как только у вас есть Почтальон и работает,
затем введите в поле URL-адрес запроса,
localhost: 3000.
И отправьте запрос себе.
Убедитесь, что ваш сервер Node HTTP запущен и запущен.
Поэтому, когда вы отправляете запрос,
вы немедленно получите ответ от сервера с HTML-кодом здесь.
Теперь преимущество, как вы видите,
с использованием Почтальона заключается в том, что вы можете увидеть фактическое тело сообщения.
Вы также можете посмотреть заголовки, чтобы увидеть, что было отправлено обратно с сервера.
Вы также можете настроить много деталей в Postman при отправке.
Запрос с сервера.
Теперь многие из них могут быть не очень просто сделать с помощью стандартного окна браузера.
Поэтому я предпочитаю использовать [INAUDIBLE] для
генерации HTTP-запросов на мой сервер.
А затем наблюдая за ответом, который возвращается со стороны сервера.
Также обратите внимание, что он показывает код состояния здесь и некоторую другую информацию
о запросе и времени ответа со стороны сервера.
Теперь, когда мы создали его простой узел на основе HTTP сервер,
давайте расширим его дальше, давайте создадим пару HTML-файлов в общей папке.
Мы назовем это как index.html.
А затем также aboutus.html,
а затем просто включите информацию о голой кости здесь.
Таким образом, мы скажем html, и
заголовок, как это index.html.
И тогда мы напечатаем тело html-страницы.
Скажем h1 Index.html
и тело, а затем это
содержимое этого файла.
Некоторый базовый html-код здесь, позвольте мне скопировать это, а
затем вставить также на страницу aboutus.html.
И содержимое файла aboutus.html, вот и все.
Мы только что создали две HTML-страницы, и
это статические HTML-страницы, которые мы создали в общей папке.
Теперь, можем ли мы настроить наш сервер HTTP, чтобы иметь возможность обслуживать статические страницы?
Это то, что мы собираемся настроить во второй части этого упражнения.
Поэтому возвращаясь к файлу index.js,
в дополнение к модулю кода HTTP,
я также импортирую модуль кода файловой системы.
И этот модуль кода пути.
Путь позволяет указать часть файла в локальной файловой системе.
Модуль файловой системы позволяет читать и
записывать файлы из локальной файловой системы.
Таким образом, с этим они скажут постоянный сервер, HTTP.CreateServer.
Для журнала консоли вместо ввода в заголовки всех запросов
я просто введу достаточно информации, поэтому
я скажу, Request for,
Просто URL-адрес этого запроса.
По методу.
Таким образом, метод будет либо получать сообщение порта, либо удалять методы.
Таким образом, эта информация будет регистрироваться.
Теперь, то, что мы собираемся сделать, это вместо того, чтобы отправить
этот ответ, стандартный ответ мира приветствия.
Здесь мы собираемся изучить метод, а
затем мы скажем, если req.method равен GET.
Таким образом, мы будем обслуживать только GET запросы в этом примере.
В противном случае мы скажем, что есть if.
Поэтому, если есть запрос GET, который приходит,
то мы рассмотрим,
URL, который приходит,
поэтому мы скажем, если req.url/,
мы скажем, FileUrl равен html.
Поэтому, если вы не получаете конкретное имя файла, но
вы просто отправляете запрос на локальный код хоста 3000.
Он будет по умолчанию index.html,
иначе он скажет, что FileUrl равен req.url.
Таким образом, вы построили какой файл на сервер.
Теперь мы скажем, мы найдем путь к файлу,
мы скажем путь, Resolve,
поэтому модуль пути поддерживает этот метод разрешения, так что это
переведет это в полноценный файл папок пути, файл,
который мы только что построили,
FileUrl, который мы только что построили.
Таким образом, это даст нам полный путь к файлу, а
затем мы скажем константу FileExtension.
Поэтому, если вы хотите убедиться, что
расширение имени файла - HTML.
Таким образом, из FilePath,
мы рассмотрим расширение имени файла, а
затем мы скажем, если FileExt ==.
Поэтому, если это HTML-файл, то мы знаем, как обслуживать его из этого конкретного
отношения узла HTTP-сервера.
Таким образом, мы скажем, если расширение файла HTML, то мы знаем, что
файл является HTML-файлом, и у нас есть два файла, индекс и aboutus.html.
Таким образом, мы проверим, существует ли этот файл, поэтому
мы скажем, если файл существует, FilePath.
Таким образом, метод exists будет проверять, существует ли файл,
поэтому мы скажем fs.exists (FilePath),
и это будет принимать в
качестве второго параметра, функцию обратного вызова.
Поэтому обратите внимание на использование функции первого обратного вызова в нашем примере.
Таким образом, эта функция обратного вызова будет вызываться с этим параметром существует там.
Таким образом, внутри этого параметра обратного вызова это будет либо true, либо false.
Таким образом, это возвращаемый параметр для этой функции обратного вызова.
Так что здесь, Мы проверим, и
мы скажем, если (! ), так
что это означает, что файл не существует,
тогда мы скажем res.statusCode = 404.
Напомним, что если файл не существует, вы отправите код состояния 404, сказав, что
вы не можете найти файл.
И тогда мы скажем res.setHeader,
и мы установим заголовок в 'Content-Type',
'text/html'.
И тогда нам нужно отправить, HTML файл здесь, или HTML-код.
Поэтому я сделаю основной HTML-код, html body h1.
Ошибка 404,
скажем, + FileUrl +
'не найден'.
И закрыть, HTML-страницу.
Итак, здесь, как вы заметили, вы используете функцию exists
модуля файловой системы, чтобы проверить, существует ли файл.
Таким образом, вы указываете путь к файлу в качестве первого параметра, а
второй - функция обратного вызова.
Внутри этой функции обратного вызова, если он говорит, что существует ложь, вы собираетесь
отправить обратно стандартное сообщение об ошибке 404, заявив, что вы не можете найти файл.
И после того, как мы это сделаем, мы просто,
вернем, в противном случае,
Мы скажем res.StatusCode
= 200, Res.SetHeader,
('Content-Type', 'text/html').
Теперь нам нужно прочитать файл, а затем отправить файл.
Так вот где, из модуля файловой системы,
мы будем использовать CreateReadStream,
который будет принимать FilePath в качестве параметра.
Таким образом, этот метод CreateReadStream будет читать в файле из этого FilePath.
А затем преобразуйте это в поток байтов,
а затем они передадут это в ответ.
Таким образом, это будет включено в ответ, в теле ответа.
Таким образом, мы просто взяли файл, а
затем построили его в ответ здесь.
И все, файл готов к отправке, ясно?
Таким образом, это если расширение файла - html,
мы проверяем, чтобы убедиться, что вы справляетесь с этим правильно.
Так вот где вы прочитаете файл, а затем отправите его.
Если расширение файла не html, то, конечно, нам нужно отправить сообщение об ошибке.
Так что прямо там мы увидим, мы скопируем этот
конкретный, Код отсюда.
А потом вставьте его туда.
Скажем, иначе StatusCode = 404, контекстный текст/html,
и сообщение об ошибке говорит: Ошибка 404, FileUrl.
Он не найден, но
это не HTML-файл.
Так что это ошибка, которую мы собираемся отправить обратно в этом случае.
И, наконец, для последнего другого случая,
поэтому здесь мы говорим метод.
Таким образом, это еще соответствует методу запроса.
Поэтому, если метод запроса не GET, но какой-то другой метод запроса,
то мы не будем обрабатывать это в этой версии наше приложение Node.
Таким образом, мы отправим обратно StatusCode 404
, Content html, и мы скажем об ошибке 404.
И мы скажем, req метод,
Не, Поддерживается,
не поддерживается этим сервером Node HTML здесь, вот и все.
С этими изменениями мы готовы перезапустить наш браузер.
А затем пусть он обслуживает HTML-файлы здесь.
Так что давайте сохраним изменения, а затем перезапустите наш сервер, а
затем изучим, что он отправляет, когда мы отправляем различные запросы на сервер.
Переходя к терминалу, если ваш сервер запущен,
остановите его, введя Ctrl+C, а затем перезапустите сервер.
И когда сервер работает, давайте отправим на него несколько запросов.
Сначала из браузера, а затем из Почтальона.
Зайдите в окно браузера, давайте напечатаем localhost: 3000 и
посмотрим, что это возвращает файл index.html, как мы ожидаем.
И тогда мы скажем localhost: 3000/index.html,
и это также вернет файл index.html.
Теперь, если мы отправим aboutus.html, он говорит Aboutus.html, и он возвращает его правильно.
Давайте теперь отправим запрос на aboutus.txt и посмотрим, что он делает.
Таким образом, он говорит, что /aboutus.txt не является HTML-файлом.
Тогда давайте отправим запрос на test.html.
И мы знаем, что test.html не существует, поэтому он говорит, что /test.html не найден.
Таким образом, мы видим, что с помощью браузера, мы можем получить
те файлы, которые существуют, и сервер может отправлять файлы в браузер.
Давайте теперь перейдем к Postman и попробуем сгенерировать те же запросы,
и посмотрим ответ от сервера.
Далее, перейдя на Почтальон, давайте отправим запрос GET локальному хосту: 3000/.
И вы видите, что это возвращает файл index.html.
Отправим запрос на aboutus.html.
И тогда вы видите, что он возвращает файл aboutus.html.
И тогда мы отправим запрос в текстовый файл,
а затем он говорит об ошибке 404, а не HTML-файл.
И вы увидите, что статус здесь говорит, 404 не найден.
И тогда мы, вместо отправки запроса GET,
посмотрим, что это преимущество использования Postman, я отправлю запрос PUT.
И вы заметите, что это говорит: Ошибка: PUT не поддерживается, и
поэтому со статусом 404 здесь и так далее.
Так вот как вы можете настроить сервер Node HTTP,
чтобы иметь возможность обслуживать файлы, HTTP-файлы в этом конкретном случае.
Теперь вы можете легко представить, что расширение
этого HTTP-сервера для обработки многих различных типов файлов и так далее.
Но, конечно, соответственно,
код также усложнится, чем то, что мы имеем в данный момент.
С этим мы завершаем это упражнение.
В этом упражнении мы видели, как мы можем настроить простой
сервер HTTP на основе узла, который обслуживает файлы с нашего сайта сервера.
[ МУЗЫКА]