Перейти к содержимому

Как запустить сервер node js

  • автор:

Node.js: пишем и запускаем собственный веб-сервер

Добавить виджет PressDev на Яндекс Подписка по RSS

nodejs

Всем привет друзья! Сегодня я хочу Вам рассказать, как можно с помощью Node.js запустить собственный веб-сервер. Урок очень интересный, так как Вы на своем компьютере можете поднять собственный сервер. Данный сервер, который мы запустим, будет раздавать содержимое файлов на определенный порт, который мы пропишем. Содержимое файлов может быть в формате text/html.

Что от Вас требуется сейчас – это установленная платформа Node.js . Вам необходимо просто ее скачать и установить. Устанавливать легко, просто запустите исполняемый файл и дождитесь окончание установки. После того, как Вы установили данную платформу, Вам необходимо создать файл, например, server.js и написать в него код сервера, он будет примерно такой:

var args = process.argv.slice(2); // проверим аргументы: путь к файлу и порт if (args.length != 2) { console.log('Не достаточно аргументов'); return; } // проверим наличие файла var fs = require('fs'); if (!fs.existsSync(args[0])){ console.log('Файл ' + args[0] + ' не найден'); return; } // запускаем сервер var http = require('http'); http.createServer( function(req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.end(fs.readFileSync(args[0], {'encoding': 'utf-8'})); } ).listen(args[1], '127.0.0.1'); console.log('Сервер успешно запущен, порт ' + args[1]);

Не забудьте сохранить данный файл в кодировке UTF-8, чтобы русский текст корректно отображался в консоли. После этого Вам необходимо создать файл с расширением html и назвать его, например, index.html, в который записать следующий код:

 < html > < head > < title >Node.js HTTP Server/ title > / head > < body > < h1 >Hello, Node.js HTTP Server!/ h1 > / body > / html >

Все, сохраняем файлы и запускаем консоль Node.js, это можно сделать через Пуск-Все программы-Node.js-Node.js command promt. После этого Вам необходимо создать папку, например server, это можно сделать вручную, с помощью мыши и клавиатуру, либо можно с помощью командной строки. После этого Вам необходимо скопировать файл server.js и index.html в папку server и запустить собственно сервер:

consol-node-js

Порт Вы можете задать любой свободный и после чего у Вас должно появиться сообщение, что сервер запущен. Запускаем браузер и переходим на наш порт, в моем случае это — http://localhost:8124/ , после чего у Вас в браузере должен отобразиться файл index.html:

veb-server-v-brauzere

Доступ к файлам через веб-сервер

Для того чтобы остановить сервер, Вы в консоли можете нажать просто сочетание клавиш Ctrl+C. Вот и все, такой замечательный урок, будем рассматривать и дальше!

Также советуем почитать на PressDev.RU

  • Запускаем Android-приложения на компьютере под Windows
  • Настройка HTTPS-соединения для Вашего сайта
  • Как выбрать хостинг. Выбор хостинга для сайта
  • Подключаемся к командной строке (консоли) своего сервера
  • Конфигуратор сервера — отличный помощник при покупке серверов

Простой WebSocket-сервер на Node.JS

Сейчас мы с вами напишем простой WebSocket-сервер на node.js. При подключении к этому серверу в ответ придёт приветственное сообщение. А так же будет доступна к выполнению пара не сложных команд.

Для этого потребуется установить Node.js с менеджером пакетов npm, он идёт в комплекте

Настройка проекта

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

mkdir websocket-server-node

Переходим в директорию

cd websocket-server-node

Далее нужно инициализировать новый проект через npm

npm init

Установщик потребует ответить на несколько вопросов, их можно пропустить

После инициализации проекта, необходимо добавить в проект библиотеку WS и настройку для работы с текстом в UTF-8

npm install ws
npm install --save-optional utf-8-validate

Код websocket-сервера

Теперь приступим к написанию кода. В директории проекта создадим новый файл server.js, откроем файл. Далее я последовательно опишу весь код, а вот ссылка на полный код на GitHub.

server.js:

В начале нужно подключить библиотеку для работы с websocket

const WebSocket = require('ws');

Далее, создадим константу, экземпляр класса WebSocket, с указанием порта на котором будет запущен WebSocket-сервер.

const wsServer = new WebSocket.Server();

В отличии от HTTP-сервера, WebSocket-сервер принимает подключение и удерживает его. HTTP-сервер принимает запросы напрямую, а WebSocket-сервер принимает запросы от подключения, такое соединение является полнодуплексное.

Напишем обработчик подключения, в качестве обработчика укажем функцию onConnect.

wsServer.on('connection', onConnect);

В момент подключения нового клиента в onConnection передаётся объекта ws-соединения, через него сервер будет общаться с каждым конкретным клиентом.

Функция onConnect принимает только один параметр, назовём его wsClient. В нашем конкретном примере мы подключим только два обработчика событий на объект wsClient: message и close.

message — обрабатывает событие входящего сообщения от клиента.

close — событие разрыва соединения с клиентом.

В самом начале функции onConnect, выведем в консоль сообщение что новый пользователь в сети. И отправим клиенту приветственное сообщение

Далее опишу заготовку для функции onConnect:

function onConnect(wsClient) < console.log('Новый пользователь'); // отправка приветственного сообщения клиенту wsClient.send('Привет'); wsClient.on('message', function(message) < /* обработчик сообщений от клиента */ >wsClient.on('close', function() < // отправка уведомления в консоль console.log('Пользователь отключился'); >>

На событие close сервер выведет в консоль уведомление.

Теперь напишем обработчик сообщений со стороны клиента. Договоримся, что команды сервер будет принимать в JSON-формате. JSON позволит отдельно указывать команду и параметры, а ответ сервера будет возвращаться в текстовом формате.

Формат JSON команд от клиента:

Как видно из формата, сервер будет принимать две команды:

  • echo-запрос, в ответ на который сервер отправит содержимое data
  • ping, в ответ сервер отправит pong
  • если команда не известна, сервер выведет в консоль уведомление «Неизвестная команда»

Содержимое обработчика сообщений от клиента:

try < // сообщение пришло текстом, нужно конвертировать в JSON-формат const jsonMessage = JSON.parse(message); switch (jsonMessage) < case 'ECHO': wsClient.send(jsonMessage.data); break; case: 'PING': setTimeout(function() < wsClient.send('PONG'); >, 2000); break; default: console.log('Неизвестная команда'); break; > > catch (error)

Как вы уже видите, на команду PING сервер не сразу ответит, а подождёт 2 секунды.

Добавим в конце файла server.js строку, которая выведет в консоль информацию, на каком порту запущен сервер.

console.log('Сервер запущен на 9000 порту');

Запуск сервера

Для запуска сервера необходимо перейти в консоль и ввести команду:

node server.js

Сервер доступен локально по адресу ws://localhost:9000. Остановить сервер можно сочетанием клавиш:

  • Для Windows и Linux (Ctrl + C)
  • Для MacOs (Cmd + C)

Если хотите проверить работу сервера с другого устройства в рамках локальной сети, то откройте ещё одно окно консоли и запустите команду

ipconfig

для Linux и MacOS:

ifconfig

В моём случае локальный адрес 192.168.0.15, значит из локальной сети сервер будет доступен по адресу ws://192.168.0.15:9000.

Проверка работы сервера

Чтобы протестировать работу сервера, откроем любую страницу в браузере и нажмём клавишу F12. Откроется DevTools, перейдём в консоль браузера и скопируем следующий код:

const myWs = new WebSocket('ws://localhost:9000'); // обработчик проинформирует в консоль когда соединение установится myWs.onopen = function () < console.log('подключился'); >; // обработчик сообщений от сервера myWs.onmessage = function (message) < console.log('Message: %s', message.data); >; // функция для отправки echo-сообщений на сервер function wsSendEcho(value) < myWs.send(JSON.stringify()); > // функция для отправки команды ping на сервер function wsSendPing() < myWs.send(JSON.stringify()); >

Запустите этот код. Далее в консоли браузера вызовите функцию wsSendPing:

wsSendPing()

Через 2 секунды сервер пришлёт ответ, и в консоли выведется:

Message: PONG

Вызовите функцию wsSendEcho, к примеру, с содержимым «Test!», и в консоли будет выведено:

Message: Test!

Вот и всё! Кому понравилось, ставьте Like, подписывайтесь. Всем Добра!

как запустить сервер node js

Для запуска сервера Node.js нужно выполнить несколько шагов:

  1. Установить Node.js на компьютер, если он еще не установлен. Скачать установщик можно на официальном сайте Node.js.
  2. Создать файл с расширением .js , в котором будет содержаться код для запуска сервера. Например, создадим файл server.js .
  3. В файле server.js нужно написать код для создания сервера. Вот простой пример:
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) =>  res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, World!\n'); >); server.listen(port, hostname, () =>  console.log(`Server running at http://$hostname>:$port>/`); >); 

Этот код создает сервер на локальном хосте (127.0.0.1) и порту 3000. Когда сервер запущен, он будет отвечать на любые запросы с сообщением «Hello, World!».

  1. Запустить сервер нужно в командной строке (терминале) из папки, где находится файл server.js . Например, если файл находится в папке myproject , то нужно перейти в эту папку командой cd myproject , а затем запустить сервер командой node server.js .
  2. Если все настроено правильно, то в консоли должно появиться сообщение «Server running at http://127.0.0.1:3000/ «, а в браузере можно открыть страницу по адресу http://127.0.0.1:3000/ и увидеть сообщение «Hello, World!».

Ваш первый сервер на Node.js

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

Модуль http для вашего Node.js-сервера

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

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

// содежимое index.js
const http = require('http')
const port = 3000
const requestHandler = (request, response) => console.log(request.url)
response.end('Hello Node.js Server!')
>
const server = http.createServer(requestHandler)server.listen(port, (err) => if (err) return console.log('something bad happened', err)
>
console.log(`server is listening on $`)
>)

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

$ node index.js

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

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

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

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

Express

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

$ npm install express --save

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

const express = require('express')
const app = express()
const port = 3000
app.get(‘/’, (request, response) => response.send('Hello from Express!')
>)
app.listen(port, (err) => if (err) return console.log('something bad happened', err)
>
console.log(`server is listening on $`)
>)

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

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

Middleware — промежуточный обработчик

Вы можете думать о промежуточных обработчиках как о конвейерах Unix, но для HTTP-запросов.

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

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

const express = require('express')
const app = express()
app.use((request, response, next) => console.log(request.headers)
next()
>)
app.use((request, response, next) => request.chance = Math.random()
next()
>)
app.get('/', (request, response) => response.json( chance: request.chance
>)
>)
app.listen(3000)

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

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

Обработка ошибок

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

const express = require(‘express’)
const app = express()
app.get(‘/’, (request, response) => throw new Error(‘oops’)
>)
app.use((err, request, response, next) => // логирование ошибки, пока просто console.log
console.log(err)
response.status(500).send(‘Something broke!’)
>)
app.listen(3000)

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

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

Рендеринг HTML

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

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

├── index.js
└── views
├── home.hbs
└── layouts
└── main.hbs

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

// index.js
const path = require('path')
const express = require('express')
const exphbs = require('express-handlebars')
const app = express()
app.engine('.hbs', exphbs( defaultLayout: 'main',
extname: '.hbs',
layoutsDir: path.join(__dirname, 'views/layouts')
>))
app.set('view engine', '.hbs')
app.set('views', path.join(__dirname, 'views'))
app.listen(3000)

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

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

 

Express handlebars


>>

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

Hello >

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

app.get('/', (request, response) => response.render('home', name: 'John' 
>)
>)

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

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

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

 

Express handlebars


Hello John



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

Отладка Express

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

Вы должны запустить свой Node.js HTTP-сервер, используя:

$ DEBUG=express* node index.js

Резюме

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

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

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