Page 334 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 334
} ) ;
const port = 8 0 8 0 ;
server . l isten ( p ort , function ( ) {
1 1 методу listen передается функция обратного вызова ,
1 1 которая вызывается после запуска сервера
g
t
console . l o ( ' Cepвep запущен на порту $ { por } ' ) ;
} ) ;
Из соображений безопасности в большинстве операционных систем
запрещено прослушивать стандартный порт НТТР (80) без запро
са на повышение прав. Фактически повышенные права необходимы
для прослушивания любого порта ниже 1 0 24. Разумеется, это сделать
не сложно: если у вас есть доступ к команде sudo, можете запустить
свой сервер через sudo и, получив права администратора, начать про
слушивать порт 80. Для целей разработки и отладки обычно исполь
зуются порты выше 1 0 24. Обычно выбирают такие номера, как 3000,
8000, 3030 и 8080, поскольку их легче запомнить.
/
Если вы запустите эту программу и перейдете в браузере по адресу http : /
8
localhost : 0 8 0 , то увидите строку Приве , мир ! . На консоли мы регистрируем все
т
запросы, которые состоят из метода и пути URL. Вас может удивить тот факт, что
каждый раз при переходите в браузере по этому URL, на сервер отправляется два
запроса.
GET /
GET / f avicon . i co
Большинство браузеров неявно запрашивают пиктограмму, которую они затем
отображают на панели URL или заголовке вкладки. Поэтому мы видим этот запрос
на нашей консоли.
В основе веб-сервера Node лежит функция обратного вызова, которую вы долж
ны указать при создании сервера. Именно она обрабатывает все входящие запросы.
Ей передается два аргумента, объект I n comingMes s age (зачастую для него выбира
ется переменная req) и объект ServerRequest (зачастую для него выбирается пере
менная res). Объект n comingMe s age содержит всю информацию о НТТР-запросе:
I
s
какой URL затребован, все посланные заголовки, все посланные в теле данные и т.д.
Объект ServerResponse содержит свойства и методы дпя управления ответом, кото
рый отсыпается назад клиенту (обычно браузеру). Если вы увидели, что мы вызвали
метод req. end, и задались вопросом "Явпяется ли req потоком записи?': то просмо
трите заголовок класса. Объект ServerResponse реализует интерфейс потока запи
си, который определяет то, как именно данные пересылаются клиенту. Поскольку
объект ServerResponse - это поток записи, он облегчает передачу файла ... но нам
ничто не мешает создать поток для чтения файла и переслать его в качестве ответа
Веб-серверы · 337

