Вы находитесь на странице: 1из 4

Node.

js ЧНТУ

Лекция 1 Начало
◦ #Современное web-приложение
◦ Зачем студентам node.js
◦ Компании использующие node.js - Netflix, Paypal, Slack, Uber, Medium, Twitter, eBay, Coursera, Trello,
Linked In, Nasa, Ватикан
◦ Почему компании используют node.js
◦ Пару слов про Electron.js
◦ Обзор курса
◦ Основные ресурсы, сайты node.js, npm, node.js api
◦ Установка node.js
◦ Создание проекта, package.json
◦ Hello world на Express.js
◦ Jest + Hello world
◦ Dotenv, передача параметров (строка, файл)
Лабораторная 1
⁃ установить node.js LTS
⁃ инициировать проект, указать автора, стартовый файл
⁃ Установить Express, Jest, Supertest
⁃ Приложение должно использовать порт 3000
⁃ Для пути ‘/‘ возвращать ‘Hello world’
⁃ Запустить приложение, увидеть в браузере Hello world
⁃ Написать тесты с помощью Jest и supertest. Увидеть успешное выполнение теста
⁃ Изменить сообщение с помощью пакета Dotenv

Лекция 2 Експресс приложение


◦ Что такое Express
◦ Возможности Express
◦ Сайт документации express
◦ Структура express приложения (сервер, роутинг, контроллер, сервисы, клиенты, конфиги, общее)
◦ Сервер и приложение
◦ Мидлверы
◦ Роутер
◦ Описание маршрутов, статические параметры, динамические параметры, body parser
◦ Convict
◦ Обработка ошибок
◦ Axios, обращение к другим сервисам
◦ Jest, моки сервисов и клиентов
◦ Nock, мок удаленного сервиса
Лабораторная 2
⁃ В корне проекта создать каталог «api». Переместить все файлы из лабораторной 1 в каталог
«proxy».
⁃ В корне проекта создать каталог «proxy».
⁃ В каталоге «proxy» создать приложение, которое похоже на «api», но использует порт 3001 и для
пути ‘/‘ отправляет запрос к «api» и возвращает полученный результат.
⁃ Для «proxy» через .env файл и пакет convict указать url приложения «api» (localhost:port) и порт,
используемый приложением «proxy».
⁃ Разбить приложение «proxy» на слои - сервер, роутинг, сервис, клиент (использует axios).
⁃ Запустить оба приложения.
⁃ В браузере ввести адрес приложения «proxy» и увидеть Hello world от приложения «api».
⁃ Написать тест для слоя сервис с замоканым клиентом.
⁃ Написать e2e (end to end) тест. supertest создает запросы к приложению. nock мокает ответы Home
world.

Лекция 3 Node.js API


◦ Ссылка на документацию и короткий обзор модулей
◦ Что такое EventEmiter
◦ Создание ивентов
◦ Подписка на ивенты
◦ Роль EventEmiter в Node. Примеры встроенных eventemiter (process, streams, callbacs)
◦ Модуль fs
◦ синхронные операции
◦ асинхронные операции
◦ Стримы на примере работы с файлами
◦ Стримы с HTTP-запросами
◦ Виды стримов (readable, writable, duplex, transform)
◦ stdin, stdout, stderr
◦ Модуль child_process (что и зачем)
◦ Spawn, exec, execFile, fork

Лабораторная 3
⁃ Создать 2 приложения («master» и «worker»).
⁃ «master» приложение запускается пользователем через терминал и раз в минуту должно вызывать
приложение «worker».
⁃ «worker» приложение, используя метод spawn, выполняет аналог команды ‘ls | grep js’ (получает
список файлов с расширением .js) и результат передает (через .pipe()) в stdout.
⁃ «master» приложение принимает stdout приложения «worker» и выводит в консоль (через .pipe()) и
одновременно сохраняет в текстовый файл (тоже через .pipe()).
⁃ Используя подписку на ивент (какой?), «master» приложение выдает сообщение в момент, когда
«worker» приложение завершилось.

Лекция 4 Docker
◦ Что такое Docker
◦ Проблемы решает: быстрое масштабирование, быстрый деплоймент, одинаковое окружение на
прод и дев, одинаковое окружение на у разных разработчиков, повышение безопасности от
вредителей
◦ Термины
◦ Images
◦ Dockerfile и популярные base images
◦ Docker Container
◦ Container registry (Docker Hub, Amazon ECR)
◦ Docker Repository
◦ Dockerfile Instructions
◦ CLI Commands
◦ Docker Compose
Лабораторнаягг 4
⁃ Установить Docker (если еще не установлен).
⁃ в приложении из лабораторной 2 добавить Dockerfile в каталогах «proxy» и «api».
⁃ В качестве базового образа использовать официальный образ Node.js LTS версии. Образ можно
найти на Dockerhub.
⁃ В качестве рабочего каталога контейнера установить “/usr/src/app”.
⁃ Скопировать содержимое проекта в контейнер.
⁃ выполнить инсталляцию npm модулей в контейнере
⁃ Создать файл .dockerignore, записать в него node_modules. суметь обьяснить зачем это надо.
⁃ Пробросить порт Express приложения наружу контейнера.
⁃ Прописать запуск приложения в контейнере.
⁃ Используя CLI, создать образ на основе Dockerfile и запустить контейнер. Убедиться, что оба
приложения, запущенные в контейнерах Docker, реагирует на запросы из браузера.
⁃ В корневом каталоге написать bash -скрипт, который будет создавать образы и запускать
контейнеры для обоих приложений.
⁃ В корневом каталоге проекта добавить docker-compose файл
⁃ Запустить «proxy» и «api» приложения с помощью docker-compose. Убедиться, что приложение
реагирует на запросы из браузера.

Лекция 5 Базы данных


◦ Краткий обзор видов баз данных (реляционные, NoSQL, document oriented, column wide store, graph,
key-value, time series)
◦ Популярный выбор MySQL+Sequelize
◦ Ссылки на ресурсы
◦ Установка MySQL (обычная и Docker), сервисы в docker-compose
◦ Настройка соединения с БД
◦ Описание модели БД
◦ Типы данных
◦ Изменения БД, миграции
◦ Использование моделей, запросы
◦ Ассоциации (соединения)
◦ Транзакции
◦ Тестирование (chance, factory girl, data seed)
Лабораторная 5
⁃ В проекте из лабораторной 4 добавить подкаталог «database» доя работы с MySQL
⁃ В подкаталоге «database» написать Dockerfile для установки и запуска MySQL.
⁃ В корневом каталоге в docker-compose добавить сервис с MySQL.
⁃ В подкаталоге «database» написать установку соединения с базой данных.
⁃ Создать модель для сохранения входящих сообщений. Поля: id, дата создания, path (часть url), user
agent (HTTP header, содержащий информацию об отправителе)
⁃ Для «proxy» в подкаталоге слоя сервисов добавить модуль для работы с базой данной. Модуль
должен иметь 2 метода: создать новую запись, прочитать и вернуть 5 последних записей.
⁃ В «proxy» создать мидлвер, сохраняющий в БД информацию о всех входящих запросах.
⁃ Создать новый роут в «proxy» приложении, который с помощью нового модуля (сервиса)
возвращает 5 последних запросов.
⁃ С помощью docker-compose запустить БД, proxy, api.
⁃ Через браузер убедиться, что приложение возвращает информацию о последних запросах.
⁃ Используя factory-girl, написать фабрику для создания входящих сообщений в БД.
⁃ Написать тест. Вызвать метод сервиса, создающий запись в БД. Используя модель таблицы в БД,
убедиться, что запись сохранилась.
⁃ Написать тест. С помощью factory-girl создать 3 записи в БД. Вызвать метод сервиса, возвращающий
5 последних записей. Убедиться, что вернулось 3 записи.
⁃ Написать тест. С помощью factory-girl создать 6 записей в БД. Вызвать метод сервиса,
возвращающий 5 последних записей. Убедиться, что вернулось 6 записей.

Лекция 6 Kubernetes
◦ Что такое оркестрация контейнеров
◦ Где нужна оркестрация контейнеров
◦ Kubernetes, kubectl, minikube
◦ Node - вычислительный узел
◦ Cluster
◦ Persistent volumes
◦ Containers
◦ Pods
◦ Deployments 
◦ Services
◦ Ingress
◦ Другие возможности (Scaling, Rollback, Rolling out updates, healthchecks, Load balancers)
Лабораторная 6
⁃ Установить kubectl.
⁃ Установить minikube.
⁃ Запустить minikube.
⁃ В каталогах «proxy», «api», «database» создать подкаталоги «deployment».
⁃ В подкаталогах «deployment» создать файлы «deployment.yaml» с описанием Pods и Deployments
для «proxy», «api», «database».
⁃ В подкаталогах «deploment» добавить файлы «service.yaml». Сервисы должны давать доступ только
внутри кластера Kubernetes (minikube).
⁃ Для приложения «proxy» в подкаталоге «deployment» добавить файл «ingress.yaml», чтобы можно
было обращаться к приложению извне кластера.
⁃ В корневом каталоге проекта добавить bash-скрипт, который:
⁃ связывает minikube с локальными образами Docker;
⁃ создает образы на основе Docker файлов во всех подкаталогах;
⁃ запускает Deployments с помощью kubectl и «deployment.yaml»;
⁃ запускает Services с помощью kubectl и «service.yaml»;
⁃ запускает Ingress с помощью kubectl и «ingress.yaml».
⁃ Выполнить bash-скрипт и убедиться, что к «proxy» можно обратиться из браузера