Меню

HTTP модуль NodeJS

01.07.2018 - Back-end, NodeJS

Http module

Один из мощнейших строительных блоков nodejs является http модуль, который мы используем для создания сетевых приложений. Например, мы можем создать веб сервер, который слушает http запросы на заданном порте. И так мы легко можем создать бэкэнд сервис для разных приложений, который мы делаем на реакте или ангуляре или для мобильных приложений.

Более подробно об этом классе мы можем узнать из официальной документации в разделе HTTP. Как мы увидим там есть некоторое количество классов со своими методами и событиями.

Давайте загрузим http модуль. Теперь мы можем вызвать метод createServer. С помощью него мы можем создать веб сервер. Давайте сохраним результат в объекте server. Вот что интересно, то что этот сервер унаследован от EventEmitter, т.е. у него есть все возможности EventEmitter, Теперь вызовем у server метод listen и передадим порт. И укажем в конце, в консоли, сообщение о том что мы слушаем.

const http = require('http');
const server = http.createServer();

server.listen(3000);

console.log('Listening on port 3000');

Когда мы запустим это приложение, этот сервер будет слушать порт 3000. Как мы говорили ранее, каждый раз, когда будет новое соединение, или новый запрос, этот сервер будет поднимать события.
Мы можем использовать on метод, для управления этими событиями.

Итак, перед прослушкой, нам нужно зарегистрировать слушателя. Например событие connection, которое мы можем найти в документации. Второй аргумент, это колбэк функция, которая и является слушателем. Как вы можете увидить из подсказки в vscode, этот слушатель это функция с одним аругментом, это сокет с типом Socket класс и она возвращает void. Итак добавим колбэк с аргументом socket. Пока просто выведем что нибудь в консоль. Теперь запустим приложение, и попробуем зайти с браузера. И если мы зайдем в терминал, то увидим там новое соединение. Как видите этот server объект, поднимает разные типы событий, на которые вы можете ответить. В реальном приложении мы конечно же не будет отвечать на событие подключения для построения http сервиса. Это очень низкий уровень.

const http = require('http');
const server = http.createServer();

server.on('connection', socket => {
    console.log('New connection...');
});

server.listen(3000);

console.log('Listening on port 3000');

Что мы будем делать, так это передадим колбэк функцию в наш метод createServer. Этот колбэк принимает два параметра: request и response. В этой функции, вместо того, чтобы работать с сокетом, мы можем работать непосредственно с объектами response и request. Итак, мы можем проверить, если url запроса равен /, то можем отослать что либо клиенту. Например «Привет, мир» с помощью метода write объекта response. А затем мы завершим ответ с помощью метода end объекта response.

const http = require('http');

const server = http.createServer((req, res) => {
    res.write("Hello, World!");
    res.end();
});

server.listen(3000);

console.log('Listening on port 3000');

Таким образом, мы можем построить бэкэнд сервис для вэб или мобильного приложения, но для этого нужно заебенить различные роутеры здесь. Допустим, добавим еще один блок проверки по адресу api/courses, возможно вы захотите вернуть список курсов с базы данных. Тогда мы напишем res.write и тут захотим вернуть массив объектов используя json и его метод stringify. Пока для примера вернем лишь массив чисел. Как видите, строить вебсервер на node — очень легко.

const http = require('http');

const server = http.createServer((req, res) => {
    if (req.url === '/') {
        res.write("Hello, World!");
        res.end();
    }

    if (req.url === '/api/courses') {
        res.write(JSON.stringify([1,2,3]));
        res.end();
    }

});

server.listen(3000);

console.log('Listening on port 3000');

В реальном приложении, вам не придется использовать этот http модуль для построения бэкэнд сервиса для вашего приложения. Причина в том, что как вы можете видеть, что чем больше роутов мы добавляем, то вызов становится всё сложнее, потому что мы добавляем все их линейно внутри одной колбэк функции. Вместо этого мы будем использовать фреймворк под названием express. Который будет предоставлять чистую структуру для построения различных роутов. Сам по себе express модуль построен над http модулем node.

Метки: , , ,

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

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