1. Главная страница » Компьютеры » Nodejs simple web server

Nodejs simple web server

Автор: | 16.12.2019

Создание сервера

Для работы с сервером и протоколом http в Node.js используется модуль http.

Чтобы создать сервер, следует вызвать метод http.createServer() :

Метод createServer() возвращает объект http.Server . Но чтобы сервер мог прослушивать и обрабатывать входящие подключения, у объекта сервера необходимо вызвать метод listen() , в который в качестве параметра передается номер порта, по которому запускается сервер.

Для обработки подключений в метод createServer можно передать специальную функцию:

Эта функция принимает два параметра:

request : хранит информацию о запросе

response : управляет отправкой ответа

Request

Параметр request позволяет получить информацию о запросе и представляет объект http.IncomingMessage . Отметим некоторые основные свойства этого объекта:

headers : возвращает заголовки запроса

method : тип запроса (GET, POST, DELETE, PUT)

url : представляет запрошенный адрес

Например, определим следующий файл app.js:

Запустим его и обратимся в браузере по адресу http://localhost:3000/index.html :

Response

Параметр response управляет отправкой ответа и представляет объект http.ServerResponse . Среди его функциональности можно выделить следующие методы:

statusCode : устанавливает статусный код ответа

statusMessage : устанавливает сообщение, отправляемое вместе со статусным кодом

setHeader(name, value) : добавляет в ответ один заголовок

write : пишет в поток ответа некоторое содержимое

writeHead : добавляет в ответ статусный код и набор заголовков

end : сигнализирует серверу, что заголовки и тело ответа установлены, в итоге ответ отсылается клиента. Данный метод должен вызываться в каждом запросе.

Например, изменим файл app.js следующим образом:

Запустим файл и обратимся в браузере к приложению:

Если предстоит отправить довольно большой ответ, то мы можем несколько раз вызвать метод write() , последовательно оправляя в исходящий поток каждый кусочек информации. Например, отправим код более менее полноценной веб-страницы:

Маршрутизация

По умолчанию Node.js не имеет встроенной системы маршрутизации. Обычно она реализуется с помощью специальных фреймворках типа Express, о котором речь пойдет в следующей главе. Однако если необходимо разграничить простейшую обработку пары-тройки маршрутов, то вполне можно использовать для этого свойство url объекта Request. Например:

В данном случае обрабатываются три маршрута. Если идет обрашение к корню сайта или по адресу localhost:3000/home , то пользователю выводится строка "Home". Ели обращение идет по адресу localhost:3000/about , то пользователю в браузере отображается строка About и так далее. Если запрошенный адрес не соответствует ни одному маршруту, то выводится заговлок "Not Found".

Однако опять же отмечу, что рамках специальных фреймворков, которые работают поверх Node.js, например, Express, есть более удобные способы для обработки маршрутов, которые нередко и используются.

Переадресация

Переадресация предполагает отправку статусного кода 301 (постоянная переадресация) или 302 (временная переадресация) и заголовка Location , который указывает на новый адрес. Например, выполним переадресацию с адреса localhost:3000/ на адрес localhost:3000/newpage

Node Hero: Глава 4

Перевод книги Node Hero от RisingStack . Переведено с разрешения правообладателей.

В этой главе я расскажу вам о том, как вы можете запустить простой HTTP-сервер на Node.js и начать обрабатывать запросы.

Когда вы начинаете создавать HTTP-приложения в Node.js, встроенные модули http/https — это то, с чем вы будете взаимодействовать.

Давайте создадим ваш первый HTTP-сервер на Node.js! Нам будет нужно подключить модуль http и привязать наш сервер к порту 3000 .

Затем запускаем этот скрипт:

Что нужно здесь отметить:

  • requestHandler : эта функция будет вызываться каждый раз, когда на сервер придёт запрос. Если вы откроете в своём браузере адрес localhost:3000 , два сообщения появятся в консоли: одно для / и одно для favicon.ico .
  • if (err) : обработка ошибок: если порт уже занят или есть какие-то другие причины, по которым сервер не может быть запущен, мы получим уведомление об этом.

Модуль http крайне низкоуровневый: создание сложного веб-приложения с использованием вышеприведенного фрагмента кода очень трудоемко. Именно по этой причине мы обычно выбираем фреймворки для работы над нашими проектами. Есть множество фреймворков, вот самые популярные:

Читайте также:  Mail ru телефон службы поддержки

В этой и следующих главах мы будем использовать Express, так как именно для него вы можете найти множество модулей в NPM.

Добавление Express в ваш проект — это просто установка через NPM:

После того, как вы установили Express, давайте посмотрим, как создать приложение аналогичное тому, что мы написали ранее:

Самое большое различие, которое вы можете здесь заметить, заключается в том, что Express по умолчанию даёт вам роутер. Вам не нужно вручную разбирать URL, чтобы решить, что делать, вместо этого вы определяете маршрутизацию приложения с помощью app.get , app.post , app.put и так далее, а они уже транслируются в соответствующие HTTP-запросы.

Одна из самых мощных концепций, которую реализует Express — это паттерн Middleware.

На диаграмме вы можете увидеть, как запрос идёт через условное Express-приложение. Он проходит через три промежуточных обработчика. Каждый обработчик может изменить этот запрос, а затем, основываясь на вашей бизнес-логике, третий middleware отправит ответ, либо запрос попадёт в обработчик соответствующего роута.

На практике вы можете сделать это следующим образом:

Что следует здесь отметить:

  • app.use : это то, как вы можете описать m >next . Вызов next сигнализирует Express о том, что он может переходить к следующему промежуточному обработчику.
  • Первый промежуточный обработчик только логирует заголовки и мгновенно вызывает следующий.
  • Второй добавляет дополнительное свойство к запросу — это одна из самых мощных функций шаблона m >Как и во всех фреймворках, правильная обработка ошибок имеет решающее значение. В Express вы должны создать специальный промежуточный обработчик — middleware с четырьмя входными параметрами:

Что следует здесь отметить:

  • Обработчик ошибок должен быть последней функцией, добавленной с помощью app.use .
  • Обработчик ошибок принимает коллбек next . Он может использоваться для объединения нескольких обработчиков ошибок.

Ранее мы рассмотрели, как отправлять JSON-ответы. Пришло время узнать, как отрендерить HTML простым способом. Для этого мы собираемся использовать пакет handlebars с обёрткой express-handlebars.

Сначала создадим следующую структуру каталогов:

После этого заполните index.js следующим кодом:

Приведенный выше код инициализирует движок handlebars и устанавливает каталог шаблонов в views/layouts . Это каталог, в котором будут храниться ваши шаблоны.

После того, как вы сделали эту настройку, вы можете поместить свой начальный html в main.hbs . Чтобы всё было проще, давайте сразу перейдём к этому:

Вы можете заметить метку <<>> — здесь будет размещен ваш контент. Давайте создадим home.hbs !

Последнее, что мы должны сделать, чтобы заставить всё это работать, — добавить обработчик маршрута в наше приложение Express:

Метод render принимает два параметра:

  • Первый — это имя шаблона.
  • Второй — данные, необходимые для рендеринга.

Как только вы сделаете запрос по этому адресу, вы получите что-то вроде этого:

Это всего лишь верхушка айсберга. Чтобы узнать, как добавить больше шаблонов (и даже частичных), обратитесь к официальной документации express-handlebars.

В некоторых случаях вам может потребоваться выяснить, что происходит с Express, когда приложение работает. Для этого вы можете передать следующую переменную окружения в Express: DEBUG=express* .

975 idophir [2011-05-21 23:44:00]

Я хочу запустить очень простой HTTP-сервер. Каждый запрос GET на example.com должен получать index.html для него, а как обычную HTML-страницу (т.е. Тот же опыт, что и при обычных веб-страницах).

Используя приведенный ниже код, я могу прочитать содержимое index.html . Как я могу служить index.html в качестве обычной веб-страницы?

Одно из приведенных ниже предложений является сложным и требует, чтобы я написал строку get для каждого ресурса (CSS, JavaScript, изображения), который я хочу использовать.

Как я могу обслуживать одну страницу HTML с некоторыми изображениями, CSS и JavaScript?

node.js webserver server

27 ответов

Для этого вы можете использовать Connect и ServeStatic с Node.js:

Установите соединение и обслуживайте статические с NPM

Создайте файл server.js со следующим содержимым:

Читайте также:  Hp envy dv7 notebook pc

Запустить с Node.js

Теперь вы можете перейти на http://localhost:8080/yourfile.html

Самый простой сервер Node.js — это просто:

Теперь вы можете запустить сервер с помощью следующих команд:

Если вы используете NPM 5.2.0 или новее, вы можете использовать http-server не устанавливая его с помощью npx . Это не рекомендуется для использования в производстве, но это отличный способ быстро запустить сервер на локальном хосте.

Или вы можете попробовать это, которое открывает ваш веб-браузер и позволяет запросам CORS:

Дополнительные сведения см. В документации по http-server на GitHub или выполните:

Множество других приятных функций и простое развертывание мозга в NodeJitsu.

Особенности Форкс

Конечно, вы можете легко пополнить свои функции своей собственной вилкой. Вы можете обнаружить, что это уже сделано в одной из существующих 800+ вилок этого проекта:

Световой сервер: альтернатива автоматического обновления

Хорошей альтернативой http-server является light-server . Он поддерживает просмотр файлов и автоматическое обновление и многие другие функции.

Добавить в контекстное меню вашего каталога в проводнике Windows

Простой сервер JSON REST

Если вам нужно создать простой сервер REST для проекта прототипа, тогда json-server может быть тем, что вы ищете.

Автообновляющие редакторы

Большинство редакторов веб-страниц и средств IDE теперь включают веб-сервер, который будет следить за вашими исходными файлами и автоматически обновлять вашу веб-страницу при их изменении.

В с открытым исходным кодом текстовый редактор Кронштейны также включает в себя статический веб — сервер NodeJS. Просто откройте любой файл HTML в скобках, нажмите "Live Preview", и он запустит статический сервер и откроет ваш браузер на странице. Браузер будет автоматически обновляться при каждом изменении и сохранении HTML файла. Это особенно полезно при тестировании адаптивных веб-сайтов. Откройте HTML-страницу на нескольких браузерах/размерах окна/устройствах. Сохраните свою HTML-страницу и мгновенно посмотрите, работает ли ваш адаптивный материал, поскольку все они автоматически обновляются.

Разработчики PhoneGap

Если вы кодируете гибридное мобильное приложение, вам может быть интересно узнать, что команда PhoneGap приняла эту концепцию автоматического обновления на борту с помощью своего нового приложения PhoneGap. Это универсальное мобильное приложение, которое может загружать файлы HTML5 с сервера во время разработки. Это очень тонкий трюк, так как теперь вы можете пропустить медленные шаги компиляции/развертывания в вашем цикле разработки для мобильных мобильных приложений, если вы меняете файлы JS/CSS/HTML — это то, что вы делаете большую часть времени. Они также предоставляют статический веб-сервер NodeJS (запуск phonegap serve ), который обнаруживает изменения файлов.

PhoneGap + Sencha Touch Developers

В настоящее время я активно адаптировал приложение для статического сервера PhoneGap и приложение PhoneGap для разработчиков Sencha Touch & jQuery Mobile. Проверьте это в Sencha Touch Live. Поддерживает QR-коды —qr и —localtunnel, которые проксируют ваш статический сервер с вашего настольного компьютера на URL-адрес вне вашего брандмауэра! Тонны использования. Массовое ускорение для гибридных мобильных разработчиков.

Кордова + разработчики ионных рамок

Функции локального сервера и автоматического обновления выпекаются в ionic инструменте. Просто запустите ionic serve из папки вашего приложения. Еще лучше. ionic serve —lab для просмотра автоматического обновления боковых представлений как iOS, так и Android.

Проверьте gist. Я воспроизвожу его здесь для справки, но суть была регулярно обновлена.

Node.JS статический файловый веб-сервер. Поместите его на свой путь, чтобы запустить серверы в любом каталоге, принимает необязательный аргумент порта.

Обновление

Суть обрабатывает файлы css и js. Я использовал его сам. Использование чтения/записи в "двоичном" режиме не является проблемой. Это просто означает, что файл не интерпретируется как текст библиотекой файлов и не имеет отношения к типу содержимого, возвращенному в ответе.

Проблема с вашим кодом заключается в том, что вы всегда возвращаете контент-тип "text/plain". Вышеприведенный код не возвращает какой-либо тип содержимого, но если вы просто используете его для HTML, CSS и JS, браузер может сделать это очень хорошо. Тип содержимого лучше, чем неправильный.

Читайте также:  Fly две сим карты

Обычно тип содержимого представляет собой конфигурацию вашего веб-сервера. Поэтому я сожалею, если это не решит вашу проблему, но это сработало для меня как простой сервер разработки и подумало, что это может помочь некоторым другим людям. Если вам нужны правильные типы контента в ответе, вам либо нужно явно определить их, как joeytwiddle, либо использовать такую ​​библиотеку, как Connect, которая имеет разумные значения по умолчанию. Самое приятное в этом состоит в том, что он простой и автономный (без зависимостей).

Но я чувствую вашу проблему. Итак, вот комбинированное решение.

83 B T [2014-10-14 09:59:00]

Вам не нужен экспресс. Вам не нужно подключаться. Node.js делает http NATIVELY. Все, что вам нужно сделать, это вернуть файл в зависимости от запроса:

Более полный пример, который гарантирует, что запросы не могут обращаться к файлам под базовым каталогом, и делает правильную обработку ошибок:

66 clee [2011-05-22 00:11:00]

Я думаю, что часть, которую вы сейчас упускаете, это то, что вы отправляете:

Если вы хотите, чтобы веб-браузер отображал HTML, вы должны изменить его на:

44 STEEL [2013-02-24 17:44:00]

Шаг1 (внутри командной строки [надеюсь, вы cd TO YOUR FOLDER]): npm install express

Шаг 2. Создайте файл server.js

Обратите внимание: вы должны добавить WATCHFILE (или использовать nodemon). Выше код предназначен только для простого сервера соединений.

ШАГ 3: node server.js или nodemon server.js

Теперь есть более простой способ, если вам просто нужен хост простой HTTP-сервер. npm install -g http-server

и откройте наш каталог и введите http-server

Быстрый способ:

Ваш путь:

Вместо того, чтобы иметь дело с оператором switch, я думаю, что более аккуратно искать тип контента из словаря:

14 tomet [2014-06-20 20:40:00]

Это в основном обновленная версия принятого ответа для подключения версии 3:

Я также добавил параметр по умолчанию, так что index.html будет использоваться по умолчанию.

Вам не нужно использовать какие-либо модули NPM для запуска простого сервера, там очень маленькая библиотека под названием " NPM Free Server" для Node:

50 строк кода, выходы, если вы запрашиваете файл или папку, и придает ему красный или зеленый цвет, если он не сработал. Менее 1 КБ в размере (уменьшено).

если на вашем ПК установлен node, возможно, у вас есть NPM, если вам не нужен материал NodeJS, вы можете использовать serve для этого:

1 — установите пакет на ПК:

2 — Подайте свою статическую папку:

Он покажет вам, какой порт используется для вашей статической папки, просто перейдите к хосту, например:

Я нашел интересную библиотеку на npm, которая может вам пригодиться. Он называется mime ( npm install mime или https://github.com/broofa/node-mime), и он может определить тип mime файла. Вот пример веб-сервера, который я написал с его помощью:

Это будет работать с любым обычным текстовым или графическим файлом (.html,.css,.js,.pdf,.jpg,.png,.m4a и .mp3 — это те расширения, которые я тестировал, но теория должна работать для всего)

Вот пример вывода, который я получил с ним:

Обратите внимание на функцию unescape в построении пути. Это позволяет указывать имена файлов с пробелами и закодированными символами.

8 samba [2016-02-03 01:40:00]

То, как я это делаю, это прежде всего установить статический сервер node глобально через

затем перейдите в каталог, содержащий ваши html файлы, и запустите статический сервер с помощью static .

Перейдите в браузер и введите localhost:8080/"yourHtmlFile" .

Изменить:

Node.js sample app Node Чат имеет необходимую функциональность.
В нем README.textfile
3. Шаг — это то, что вы ищете.

  • создать сервер, который отвечает на мир приветствия на порту 8002

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *