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
   329   330   331   332   333   334   335   336   337   338   339