Главная»Железо»Новичок Nodejs как на хостинге запустить сервер? JavaScript — Киберфорум
Новичок Nodejs как на хостинге запустить сервер? JavaScript — Киберфорум
HTML5
После чего в браузере набираю [адрес сервера] и получаю: Hello World!
Вопрос: как с помощью Nodejs выдать по адресу [сервера] : Hello World! .
По урока создаю скрипт на хостинге server.js
Javascript
Javascript
После чего иду по адресу [сервера] и ничего не вижу, никакого Hello World ((((((((((((
Для проверки, установил Nodejs себе на ПК и сделал аналогично варианту хостинга создал server.js файл
Javascript
Сакинул его на C:/ запустил cmd и пишу: node c:/server.js Запускаю браузер и захожу на http://localhost:8080 Да, я вижу Hello World!
Но как же я могу увидеть Hello World! используя хостинг и Nodejs, пройдя по адресу под домена . Помогите пожалуйста разобраться
07.07.2016, 14:29
Как запустить сервер (хост) на хостинге? Есть сервер(я не знаю как назвать то приложение которое запускает ServiceHost). Есть интернет.
Как запустить сессию в nodejs, express? Здравствуйте, и ещё один вопрос. Как осуществить работу сессий в nodejs и фрэймворком express? .
Ошибка nodejs приложения на хостинге Здравствуйте, столкнулся с такой вот проблемой, не работает nodejs приложение.
Для чего нужен iisnode при хостинге nodejs под IIS? Подскажите, пожалуйста. Я всегда хостил ноду на линукс-машинах и не понимаю этой проблемы. На одном.
07.07.2016, 19:27
2
Javascript
Javascript
ошибка гласит, что порт уже занят
для того, чтобы отрисовался ваш файл нужно использовать другой код.
Добавлено через 4 минуты а ещё нужно настроить проксирование на вашем хостинге.
08.07.2016, 14:57 [ТС]
3
$ node sj/public_html/server.js Server running on port 3060[JS] но ввожу в ьраузер адрес под домена sj. и ничего нет
HTML5
08.07.2016, 14:59
4
11.08.2016, 14:34 [ТС]
5
11.08.2016, 15:36
6
11.08.2016, 17:12
7
14.08.2016, 23:34
8
Если объяснять просто, то за отображение ( не нода ) отвечает apache или nginx, который автоматически ( при заходе на поддомен ) ( т.е. 80 порт ) пытается запустить php/html файл.. js ( nodejs ) по такому принципу не получиться запустить.. что тут нужно понимать.. в nodejs уже встроен «apache» ( только это не апач, но для понимания пусть будет им ), когда ты говоришь ноду запустить сервер и слушать порт, он по сути делает то же самое что и апач ( которому говоришь слушать порт и вытягивать файлы из такой-то директории ). НО т.к. на сервере стоит апач и у него уже забиндин порт 80, то нод выдаёт тебе ошибку ( мол порт занят EADDRINUSE ).
Решение: для решения этой проблемы тебе нужно запускать ноду на свободном порту ( этот порт может быть закрыт для внешнего доступа даже ), но настоить апач или nginx таким образом, что бы заходя на 80 порт он тебя «виртуально» перебрасывал на порт который у тебя в ноде стоит. ProxyPass и ProxyPassReverse используются для этих целей ( выше есть пример, а так же в сети их полно )
Таким образом, человек заходя на 80 порт «виртуально» ( апачем ) перебрасывается на другой порт где работает nodejs.
Кстати, если у тебя порт открыт, то ты должен мочь зайти на него по адресу: yourwebsite.zoneort
14.08.2016, 23:34
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Как запустить скрипт Python на хостинге Здравствуйте! Заранее прошу прощения — с Python сталкиваюсь впервые. Ситуация такова: На хостинге.
Как запустить .ехе файл на сервере, хостинге? Как запустить .ехе файл на сервере. Нужно запустить и настроить ехе программу на сервере чтобы.
Как развернуть socket сервер на хостинге — Клиент Серверное приложение Здравствуйте! Столкнулся с такой проблемой: У меня есть клиент и сервер, написанные на сокетах.
Знакомство с Node.JS: запускаем первый сервер
Доброго вам дня! Как я говорил — не затягиваю со второй статьей. Если вы не читали первую, то советую перейти к ней, а потом вернуться сюда снова. Сегодня мы снова отойдем от разработки CMS и PHP в целом. Сегодня мы погрузимся в пучину Node.JS.
Итак, в прошлый раз мы остановились на том, что разобрались вкратце что такое Node.JS и узнали, что на JavaScript можно писать не хуже чем на PHP. Но сегодня я попробую вам это доказать и показать как.
Для начала, необходимо что бы у вас была установлена среда Node.JS и 3 необходимых нам модуля: Express, log4js и Socket.IO. О том, как их установить я говорил в прошлой статье.
Express мы будем использовать основным фреймворком нашего проекта, log4js поможет нам вывести информацию в лог нашего сервера с различной подсветкой, а Socket.IO — главная часть нашего проекта — позволит установить двустороннюю связь с клиентом (посредством сокетов) и общаться с ним в реальном времени.
Ну что, можем начинать. И начнем мы с того, что откроем в папке с нашим проектом файл app.js и сотрем все что там есть — оно нам не нужно. Этот файл у нас будет сервером и выполнять его будет непосредственно интерпретатор Node.JS. Для работы нам в самом начале необходимо подключить все наши модули, делается это с помощью функции require() :
Данной строкой мы подключили модуль фреймворка Express, который устанавливали ранее. Далее нам необходимо объявить переменную нашего приложения, указав что мы будем использовать этот фреймворк:
Теперь все обращения к переменной app будет обрабатывать express. Теперь давайте подключим модуль логирования, в случае с log4js делается это так:
Мы объявили переменную logger через которую подключили модуль log4js и запросили сам логгер. Это краткая запись, специфичная для языка JS, для понимания — следующий пример равносилен:
Тут мы сначала подключаем модуль а потом в отдельную переменную получаем сам логгер. Если вам нравится такая запись — пожалуйста.
Следующий модуль, который нам нужен — это http . Данный модуль входит в состав Node.JS, поэтому его не нужно устанавливать, только подключить.
Тут я снова воспользовался краткой записью. Мы подключаем модуль http и создаем сервер через переменную нашего приложения, в которой у нас засел Express. развернутая запись этого кода:
Теперь последний модуль, который мы подключим — это Socket.IO:
Мы поместили его в переменную io и после подключения сразу же цепляем модуль к нашему серверу в переменной server .
При запуске сервера нам нужно будет указывать порт, давайте укажем его через переменную port :
Все модули подключены. На данном этапе у вас в файле app.js должно быть примерно следующее:
Теперь давайте напишем код запускающий сервер и проверим работу нашей программы в node. Для запуска сервера нам необходимо указать, какой порт ему «слушать» и адрес нашего сервера. По умолчанию, если не задавать адрес — будет слушаться локальный: 127.0.0.1 или localhost , но мы его все равно укажем, на всякий случай:
Данными строками мы указываем какой порт необходимо слушать и по какому адресу, а далее идет callback-function , в которой мы создаем переменную addr и помещаем в нее объект с данными адреса нашего сервера. Затем с помощью нашего логгера выводим информацию о том какой адрес и порт слушает наш сервер.
Модуль log4js имеет несколько функций вывода в лог: debug , error , info , fatal , warn , trace . Все они работают одинаково, отличается лишь цвет текста, выводимый в лог программы. Не будем на этом сильно задерживаться, еще в дальнейшем все попробуем, а пока — давайте уже запустим наш сервер!
Для этого в командной строке перейдите в папку с проектом и наберите команду node app.js :
Если все сделали правильно, то должны увидеть в консоли работу логгера, который вывел информацию о том, какой порт и адрес прослушивает наш сервер. Теперь попробуйте открыть в браузере адрес http://127.0.0.1:3000/ , и вы увидите такую картину:
Да, это ошибка, но эту ошибку сгенерировал наш с вами сервер, а значит что мы на верном пути. Сама ошибка возникает потому, что сервер принял запрос от клиента, но не знает что с этим запросом делать. Давайте ему поможем. С помощью express это делается просто:
Дословно, эта команда звучит: «если запрашивается корень сайта — отправить в ответ текст …». Структура обработки запросов в целом всегда такая — запрашиваемый путь и callback-функция с двумя параметрами: первый содержит запрос клиента, второй — ответ клиенту. В чистом Node.JS доступны только они, но express добавляет к ним свои «фичи», и метод send() — одна из них. Теперь перезапустим сервер: для этого в консоли необходимо нажать сочетание клавиш ctrl + C и снова запустить приложение командой node app.js . Вы снова увидите сообщение логгера, после чего можно снова попробовать открыть наш адрес в браузере:
Если все было сделано правильно, то увидите такой же результат. Теперь хочу показать вам еще одну фишку — обработку динамичных запросов клиента. Для примера, будем считать что после слеша в адресе указывается какой-то логин или имя, например http://127.0.0.1:3000/fussraider , а наш сервер будет отвечать приветствием этому имени. Добавим ниже следующий код:
Все, что мы указываем в адресе запроса через двоеточие — считается параметром запроса и попадает в объект req.params , с которым мы можем работать в callback-функции. В данном случае мы отправили в ответ клиенту текст «Hello ». Перезапустите сервер и откройте страницу, например http://127.0.0.1:3000/fussraider ну или любое другое имя/никнейм. Сервер ответит вам так:
Круто же! Данный пример показывает, насколько просто и удобно можно обрабатывать запросы и получать семантические ссылки (ЧПУ) без танцев с бубном. Для обработки запросов POST, к сожалению, такого легкого способа нет. Об этом поговорим в другой раз, а пока двинемся дальше.
Отправлять текст клиенту в ответ конечно круто, но несерьезно. Давайте отправим какой-то html-файл. Делается это тоже очень просто, в express есть готовый метод — sendFile() и работает он так:
Этот код пишем взамен тому, что мы уже написали для обработки запроса корня сайта. __dirname — это глобальная переменная Node.JS которая содержит в себе полный путь до папки выполняемого файла, в нашем случае файла app.js . Как видно из кода — отправляем мы файл, которого у нас пока нет. Давайте создадим в корне проекта папку public в которую будем в дальнейшем складывать все файлы для клиента. В ней создадим файл index.html и накидаем туда какую-то простенькую верстку с какими-нибудь стилями:
Вот теперь перезапускаем наш сервер и сморим что получилось:
Как видите, наш файл был успешно отправлен как при запросе корня сайта, так и при запросе конкретно имени. В дальнейшем мы будем делать это несколько иначе. Для подобных вещей в express предусмотрено понятие «статичных файлов» — мы просто указываем серверу где лежат статичные файлы, а он отправляет их при соответствующем запросе. Для примера — отделим CSS-стили из примера выше в отдельный файл style.css и положим рядом с файлом верстки в папке public , а в самом файле index.html блок со стилями заменим на подключение нового файла стилей:
Теперь в коде app.js обработку запроса файла index.html заменим на такую конструкцию:
мы указали серверу где искать статичные файлы, и при запросе от клиента — в первую очередь сервер будет смотреть — есть ли такой файл в этой папке, и если есть — отправлять его клиенту.
Если сейчас перезапустить сервер и обновить страницу в браузере вы увидите содержимое html-файла, но без стилей. Почему? Все из-за обработки динамичных запросов, которую мы рассматривали выше. При запросе клиентом файла по адресу http://127.0.0.1/style.css сервер отвечает текстом «Hello style.css» ? . Удалите этот код, он был показан для примера и более не нужен. Перезапустите сервер и обновите страницу — вуаля.
На сегодня пожалуй хватит. В следующий раз расскажу вам о том, как еще можно немного облегчить разработку и заставить сервер презапускаться самостоятельно при изменениях в его коде. Ну и продолжим писать наш сервер — поговорим о сокетах. Ниже я прикладываю исходник текущего варианта сервера. Перед запуском не забудьте выполнить команду npm install для установки всех необходимых модулей.
Ваш первый сервер на Node.js
Node Hero: Глава 4
Перевод книги Node Hero от RisingStack . Переведено с разрешения правообладателей.
В этой главе я расскажу вам о том, как вы можете запустить простой HTTP-сервер на Node.js и начать обрабатывать запросы.
Модуль http для вашего Node.js-сервера
Когда вы начинаете создавать HTTP-приложения в Node.js, встроенные модули http/https — это то, с чем вы будете взаимодействовать.
Давайте создадим ваш первый HTTP-сервер на Node.js! Нам будет нужно подключить модуль http и привязать наш сервер к порту 3000 .
Затем запускаем этот скрипт:
Что нужно здесь отметить:
requestHandler : эта функция будет вызываться каждый раз, когда на сервер придёт запрос. Если вы откроете в своём браузере адрес localhost:3000 , два сообщения появятся в консоли: одно для / и одно для favicon.ico .
if (err) : обработка ошибок: если порт уже занят или есть какие-то другие причины, по которым сервер не может быть запущен, мы получим уведомление об этом.
Модуль http крайне низкоуровневый: создание сложного веб-приложения с использованием вышеприведенного фрагмента кода очень трудоемко. Именно по этой причине мы обычно выбираем фреймворки для работы над нашими проектами. Есть множество фреймворков, вот самые популярные:
В этой и следующих главах мы будем использовать Express, так как именно для него вы можете найти множество модулей в NPM.
Express
Добавление Express в ваш проект — это просто установка через NPM:
После того, как вы установили Express, давайте посмотрим, как создать приложение аналогичное тому, что мы написали ранее:
Самое большое различие, которое вы можете здесь заметить, заключается в том, что Express по умолчанию даёт вам роутер. Вам не нужно вручную разбирать URL, чтобы решить, что делать, вместо этого вы определяете маршрутизацию приложения с помощью app.get , app.post , app.put и так далее, а они уже транслируются в соответствующие HTTP-запросы.
Одна из самых мощных концепций, которую реализует Express — это паттерн Middleware.
Middleware — промежуточный обработчик
Вы можете думать о промежуточных обработчиках как о конвейерах Unix, но для HTTP-запросов.
На диаграмме вы можете увидеть, как запрос идёт через условное Express-приложение. Он проходит через три промежуточных обработчика. Каждый обработчик может изменить этот запрос, а затем, основываясь на вашей бизнес-логике, третий middleware отправит ответ, либо запрос попадёт в обработчик соответствующего роута.
На практике вы можете сделать это следующим образом:
Что следует здесь отметить:
app.use : это то, как вы можете описать middleware. Этот метод принимает функцию с тремя параметрами, первый из которых является запросом, второй — ответом, а третий — коллбеком next . Вызов next сигнализирует Express о том, что он может переходить к следующему промежуточному обработчику.
Первый промежуточный обработчик только логирует заголовки и мгновенно вызывает следующий.
Второй добавляет дополнительное свойство к запросу — это одна из самых мощных функций шаблона middleware. Ваши промежуточные обработчики могут добавлять дополнительные данные к объекту запроса, который могут считывать/изменять middleware, расположенные ниже.
Обработка ошибок
Как и во всех фреймворках, правильная обработка ошибок имеет решающее значение. В Express вы должны создать специальный промежуточный обработчик — middleware с четырьмя входными параметрами:
Что следует здесь отметить:
Обработчик ошибок должен быть последней функцией, добавленной с помощью app.use .
Обработчик ошибок принимает коллбек next . Он может использоваться для объединения нескольких обработчиков ошибок.
Рендеринг HTML
Ранее мы рассмотрели, как отправлять JSON-ответы. Пришло время узнать, как отрендерить HTML простым способом. Для этого мы собираемся использовать пакет handlebars с обёрткой express-handlebars.
Сначала создадим следующую структуру каталогов:
После этого заполните index.js следующим кодом:
Приведенный выше код инициализирует движок handlebars и устанавливает каталог шаблонов в views/layouts . Это каталог, в котором будут храниться ваши шаблоны.
После того, как вы сделали эту настройку, вы можете поместить свой начальный html в main.hbs . Чтобы всё было проще, давайте сразу перейдём к этому:
Вы можете заметить метку <<
>> — здесь будет размещен ваш контент. Давайте создадим home.hbs !
Последнее, что мы должны сделать, чтобы заставить всё это работать, — добавить обработчик маршрута в наше приложение Express:
Метод render принимает два параметра:
Первый — это имя шаблона.
Второй — данные, необходимые для рендеринга.
Как только вы сделаете запрос по этому адресу, вы получите что-то вроде этого:
Это всего лишь верхушка айсберга. Чтобы узнать, как добавить больше шаблонов (и даже частичных), обратитесь к официальной документации express-handlebars.
Отладка Express
В некоторых случаях вам может потребоваться выяснить, что происходит с Express, когда приложение работает. Для этого вы можете передать следующую переменную окружения в Express: DEBUG=express* .
Создаем наш первый API при помощи Node.js и Express: Создаем сервер
Russian (Pусский) translation by AlexBioJS (you can also view the original English article)
Создание сервера Express для API при помощи Node.js
В предыдущем руководстве мы рассмотрели, что из себя представляет архитектура REST, шесть основных требований, которые выдвигаются к REST, значение методов запроса HTTP и кодов состояния ответов и структуру конечной точки RESTful API .
В этом руководстве мы создадим сервер, на котором будет располагаться наш API. Вы можете создавать API при помощи любого языка программирования и любого серверного программного обеспечения, однако мы будем использовать платформу Node.js, которая является реализацией JavaScript для стороны сервера, и Express – популярный фреймворк для Node.js с самым необходимым функционалом.
Установка
Для начала нам необходимо убедиться, что Node.js и npm установлены глобально на нашем компьютере. Мы можем это проверить при помощи выполнения команды с флажком -v , в результате чего будут показаны установленные версии этих инструментов. Откройте вашу консоль и введите туда следующую команду:
Версии, установленные на вашем компьютере, могут слегка отличаться от тех, что установлены у меня, однако если оба инструмента имеются, то можем приступить.
Давайте создадим папку проекта под названием express-api и перейдем в нее.
Теперь, когда мы в ней, мы можем инициализировать наш проект, выполнив команду init.
В результате вам будет предложен ряд вопросов о проекте, на которые вы можете как отвечать, так и нет. После настройки у вас будет файл package.json, который выглядит следующим образом:
Теперь, когда у нас есть package.json, мы можем установить зависимости, необходимые для нашего проекта. К счастью, нам нужны только следующие:
body-parser – промежуточное ПО для разбора тела запросов;
express – веб-фреймворк с самым необходимым функционалом, который мы будем использовать для создания нашего сервера;
mysql: драйвер MySQL;
request (необязателен) – легкий способ выполнения запросов HTTP;
Мы воспользуемся командой install , за которой будут следовать все зависимости, для завершения настройки нашего проекта.
В результате будут созданы файл package-lock.json, папка node_modules, и package.json теперь будет выглядеть подобно следующему:
Создание сервера HTTP
Перед тем как создать сервер Express, мы быстренько создадим сервер HTTP при помощи встроенного модуля http Node, чтобы вы получили общее представление о том, как работает простенький сервер.
Создайте файл под названием hello-server.js. Загрузите модуль http , установите значение порта (я выбрала 3001 ) и создайте сервер при помощи метода createServer() .
Во вступительном руководстве этой серии мы рассмотрели, какую роль выполняют запросы и ответы для сервера HTTP. Мы настроим наш сервер так, чтобы он мог обрабатывать запрос и отображать его URL-адрес на стороне сервера, а также так, чтобы на стороне клиента отображалось сообщение «Hello, server!».
Наконец, мы укажем серверу, какой порт прослушивать и будем выводить ошибки при их наличии.
Теперь мы можем запустить наш сервер при помощи команды node , за которой следует имя файла.
Вы увидите ответ в консоли.
Для того чтобы проверить, действительно ли запустился сервер, перейдите в вашем браузере по адресу https://localhost:3001/ . Если все нормально, то вы увидите «Hello, server!» на странице. В вашей консоли вы увидите запрошенный URL-адрес.
Если бы вы перешли по адресу http://localhost:3001/hello , то увидели бы URL: /hello .
Также мы можем использовать инструмент cURL на нашем локальном сервере, за счет чего нам будут показаны точные возвращенные заголовки и тело ответа.
Если вы закроете консоль, когда захотите, то сервер прекратит работу.
Теперь, когда мы получили общее представление о том, как работает сервер, запрос и ответ вместе, мы можем переписать этот код для Express, интерфейс которого даже проще и возможности которого более широки.
Создаем сервер Express
Мы создадим новый файл, app.js, который будет выступать в роли точки входа (* файл для запуска приложения) для собственно нашего проекта. Так же как и в случае с оригинальным сервером http, мы запросим модуль и укажем порт для запуска сервера.
Создайте файл app.js и добавьте туда следующий код:
Теперь, вместо того чтобы прослушивать все запросы, мы явно укажем серверу, что нам необходимы только запросы, выполненные по методу GET к корневой папке сервера ( / ). При получении конечной точкой запроса « / » мы отобразим запрошенный URL-адрес и выведем сообщение «Hello, Server!».
Наконец, мы запустим сервер, который будет прослушивать запросы, выполненные по 3002 порту, при помощи метода listen() .
Мы можем запустить сервер при помощи команды node app.js , как и ранее, однако мы можем изменить свойство scripts в файле package.json для автоматического запуска этой конкретной команды.
Теперь мы можем использовать команду npm start для запуска сервера, и после запуска мы увидим сообщение в консоли.
Если мы выполним команду curl -i для обсуждаемого URL-адреса, то увидим, что сервер в этом случае работает на базе Express и что имеются некоторые дополнительные заголовки вроде Content-Type .
Добавляем промежуточное ПО для разбора тела запросов
Для того чтобы облегчить работу с запросами по методам POST и PUT к нашему API, мы добавим промежуточное ПО для разбора тела запроса. Тут нам и пригождается модуль body-parser . За счет этого модуля будет извлечено все тело пришедшего запроса, а его данные преобразованы в JSON-объект, с которым мы можем работать.
Мы просто запросим модуль вверху кода нашего файла. Добавьте следующую инструкцию require в верхнюю часть вашего файла app.js.
Затем мы укажем нашему приложению Express, что необходимо использовать body-parser и преобразовывать данные в формат JSON.
Также давайте изменим наше сообщение таким образом, чтобы вместо простого текста в качестве ответа отправлялся JSON-объект.
Далее приводится код нашего файла app.js, который имеем на данный момент:
Если вы отправите запрос при помощи curl -i на сервер, то увидите, что в заголовке Content-Type теперь указано значение application/json; charset=utf-8 .
Настраиваем маршруты
Пока что у нас имеется только маршрут для обработки запросов по методу GET к корню приложения « / »), однако наш API также должен быть способен обрабатывать запросы HTTP по всем главным методам к различным URL. Мы настроим маршрутизатор (* предоставляет функциональные возможности для обработки ответов) и добавим некоторые выдуманные данные для отправления пользователю.
Давайте создадим новую папку под названием routes и файл под названием routes.js. Мы подключим его вверху app.js.
Обратите внимание на то, что расширение .js в require указывать необязательно. Теперь мы переместим маршрут для обработки запросов GET в routes.js. Добавьте следующий код в routes.js:
Наконец, экспортируйте маршрутизатор, чтобы мы могли им воспользоваться в нашем файле app.js
В app.js замените имеющийся код app.get() вызовом routes() :
Теперь вы могли бы перейти по http://localhost:3002 и увидеть то же, что и ранее. (Не забудьте перезапустить сервер!)
После удачной настройки вышеуказанного мы предоставим некоторые данные в формате JSON при помощи другого маршрута. Пока что мы воспользуемся просто выдуманными данными, поскольку наша база данных еще не создана.
Давайте создадим переменную users в routes.js с некоторыми выдуманными пользовательскими данными в формате JSON.
Мы добавим еще один маршрут для обработки запросов по адресу /users и методу GET в наш маршрутизатор и будем отправлять с его помощью пользовательские данные.
После перезапуска сервера теперь вы можете перейти по http://localhost:3002/users и увидеть все наши данные.
Обратите внимание: если у вас не установлено в браузере расширения для просмотра файлов в формат JSON, то я вам очень рекомендую скачать его, например JSONView для Chrome. Благодаря этому вам будет намного проще читать данные!
Посетите репозиторий GitHub, чтобы ознакомиться с конечным кодом для этого поста и сравните его со своим.
Заключение
В этом руководстве мы рассмотрели, как создать сервер при помощи встроенного модуля Node HTTP и при помощи Express, как назначить маршруты для запросов, выполняемых по различным URL-адресам, и как получать пришедшие в запросах по методу GET данные в формате JSON.
В последнем руководстве этой серии мы подключим наш сервер Express к MySQL для создания, просмотра, обновления и удаления пользователей из нашей базы данных, завершая реализацию функциональных возможностей нашего API.
14. Node.JS как веб-сервер
Всем привет, в этой главе мы познакомимся с Node.JS уже в роли веб сервера. Создадим для этого новое приложение. Сейчас я нахожусь в редакторе «WebStorm», в совершенно пустой директории. Первым делом мы немного настроим проект, мы это уже проходили, посмотреть можно здесь. Далее я создаю файл «server.js»
и в нем, первым делом, подключаю модуль «http». Об этом модуле, мы еще поговорим подробнее, но на текущий момент нам необходим из него один объект. Это «http.Server()», как следует из его названия, он умеет слушать IP и Порт и отвечать на входящие запросы. Для того, чтобы дать ему IP и Порт используется команда «listen()». Ну а для того, чтобы отвечать на запросы, используются события. «http.Server()» является «EventEmitter» и при входящих запросах, соответствующие событие инициируется, которое называется «request», и его обработчик получает два объекта, первый «req» это входящий запрос, он содержит информацию, которую присылает браузер, включая в частности URL пришедшего запроса, и второй параметр «res» это объект ответа, из первого мы читаем во второй пишем. Конкретно наша функция, тут же заканчивает выполнение запроса, отсылая фразу привет мир. Давайте мы посмотрим как это работает. Для этого я создам конфигурацию, смотрим по шагам
Теперь зайдем по этому адресу в нашем браузере — «server.listen(1337, ‘127.0.0.1’);»
Упс, кодировка слетела, давайте добавим код, который в добавит правильную кодировку
Замечательно, по виду все работает. Чтоб в этом убедиться создадим переменную «counter» которая будет выводить текущий счетчик запросов.
Для проверки в браузере нужно перезагрузить сервер, потому что Node.JS устроен так, что запустившись и считав файл модуля, в данном случае файл «server.js», Node.JS создает из него объект module и этим объектом в дальнейшем пользуется. Соответственно при изменениях данного файла, Node.JS просто не подбирает эти изменения, потому что файл уже обработан. Соответственно, чтобы заставить Node.JS перечитать файл, самый простой способ запустить сервер еще раз. Но если я сейчас нажму Play
То вот, что мы увидим
Ошибка «EADDRINUSE» означает, что адрес уже используется, потому что node server.js попытался запустится еще раз, не прекратив действие уже запущенной программы. Предыдущий сервер уже занял этот IP и Порт. Что делать? Например можно взять и подредактрировать конфигурацию добавив «Single instance only», ну и имя дадим нашему серверу, заодно
Это означает, что этот сервер может быть запущен в единственном экземпляре. И тогда повторный play убьет текущий запуск, и перезапустит сервер. Если вы в консоле работаете, то это вообще не проблема, прибиваете текущий Node.JS и стартуете новый. В дальнейшем мы посмотрим как это оптимизировать.
И так, теперь перехожу в браузер и нажимаю рестарт. Счетчик увеличивается, но не на один, а на два. Это все потому что браузер устроен так, что вместе со страничкой он делает еще один запрос, этот запрос делается на url «favicon.ico». В данном случае мы никакую favicon не отдаем, поэтому браузер каждый раз его повторяет, поэтому одно обновление страницы приводит к двум запросом. По крайней мере в текущем контексте в хроме. Что ж, мы сделали наш первый серверный Node.JS. В дальнейшем мы будем работать, чтобы сделать его гораздо мощнее и интереснее.
Перед тем как мы продолжим, не большая ремарка. Если вы посмотрите сам сайт Nide.JS то пример аналогичный этому выглядит там немножко по другому, он выглядит так
Основное отличие здесь в том, что мы используем «new Server()», а на сайте «http.createServer()» — это одно и то же. Ну и далее у нас обработчик запросов ставиться явно, а в примере с сайта он передается аргументом. Передача аргументов, это тоже установка обработчика, просто такой дополнительный синтаксис. Он чуть чуть короче, но я выбрал для примера другой синтаксис потому что он более нагляден и показывает то, что реально происходит.
А теперь, если вы внимательно читали, то у вас не вызовет проблемы ответить на следующий небольшой вопрос: в нашем примере есть обработчик событий ‘request’, скажите пожалуйста, как не глядя в документацию сказать какие еще есть события для сервера и когда они вызываются, в каком порядке, при обработке этого запроса? Почему я прошу не смотреть документацию? Тут две причины, во первых так интересней, во вторых «Server()», вот этот
на самом деле наследует от «net.Server», а он от «EventEmitter».
http.Server -> net.Server -> EventEmitter
Соответственно некоторые события сервера описаны в «http.Server», а некоторые в документации к «net.Server» и просто взглянув в книгу, понять точный порядок событий, достаточно сложно. Подсказка находится вот в этой строке — http.Server -> net.Server -> EventEmitter Сервер является «EventEmitter», это означает, что все события генерируются вызовом «server.emit» понятно, что мы сами не вызываем этот метод, в данном случае его вызывает сам Node.JS, а мы просто ставим обработчики. Но ничто нам не мешает, чисто джава скриптовым трюком, переопределить этот метод на наш собственный. Метод «emit» принимает название события и необходимые данные для него, в данном случае это будут «req» и «res». Но нас интересует только название события, которое мы при помощи «console.log()» будем выводить. Ну а далее мы будем передавать вызов исходному методу «emit». Посмотрим что получилось, перезапускаем сервер и тут же видим первое событие «listening», оно означает, что сервер начал слушать соединение.
Далее захожу в браузер и перехожу по адресу «http://127.0.0.1:1337/». А теперь обратите внимание перезагружаю страницу браузера и мы видим, что «request» в консоле WebStorm увеличивается, причем по две штуки, ну мы знаем почему, а «connection» было одно, другое в общем мало.
Потому что событие «connection» возникает тогда, когда браузер открывает к серверу новое соединение, сетевое, а «request» присылает запрос. Браузер устроен так, что одно сетевое соединение он старается использовать по максимуму, называется это «Keep-Alive», он его сохраняет и по нему гонит новые и новые запросы.