Skip to content

Vadimkkka/node-server-template

Repository files navigation

🪲 Node server template

JavaScript Node.js Express Prisma Jest Swagger Docker

Простой сервер на Express с тестами на Jest 👋

Preview

Для примера реализован тестовый маршрут по адресу localhost/api/v1/test/item с уже готовой тестовой средой. Документация находиться по маршруту localhost/docs.

Файл /docs/test-api.paw необходим для удобства разработки через приложение 🦊 Paw

🛠 Конфигурация .env файла

MODE=dev
PORT=3000
DATABASE_URL="mysql://root:root@localhost:3306/prisma"

При dev моде - логирование ведётся в консоль, для prod в файл /logs/test.log по умолчанию.

Модуль логирования находится в /logs/logger.js, в нем можно настроить вывод за основу взят morgan

🏁 Первый запуск

Создание базы данных

$ npx prisma migrate dev --name init

Заполнение тестовыми данными (необязательно)

$ npx prisma db seed

Создание документации

$ npm run docs

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

$ npm run dev

🧑‍💻 Запуск тестов

При запуске тестов автоматически задается MODE=test

$ npm run test-dev
$ npm run test

🐳 Docker

docker/.env

MYSQL_USERNAME=root
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=prisma

✋ Change .env file in main dir

DATABASE_URL="mysql://root:root@database:3306/prisma"

Основные команды 🔫

// Создает и запускает контейнер
$ docker-compose up --detach

// Выполнить команду из контейнера
$ docker exec -it <app_container_id> npx prisma db seed

// Запустить/остановить контейнер
$ docker-compose start/stop

// Остановить контейнер и удалить образы
$ docker-compose down --rmi all/local -v

🗃 Работа с БД через Prisma

Миграция из prisma/schema.prisma в базу данных

$ npx prisma migrate dev --name init

Проанализировать свою базу данных и записать схему в prisma/schema.prisma

$ npx prisma db pull
// Обновить клиент для отправки запросов
$ npx prisma generate

Визуальный редактор данных в вашей базе данных

$ npx prisma studio

Заполнить базу данных образцом данных prisma/seed.js

$ npx prisma db seed

📜 Запуск авто-генерации документации API

$ npm run docs

Preview docs

🏋️‍ TODO

  • 💅 Преобразить /public/index.html
  • 💪 Добавить express-cluster + pm2
  • 🗃 Добавить работу с бд через prisma
  • 🐳 Добавить docker
  • ✋ Добавить express-rate-limit и express-slow-down
  • 🕯 Добавить express-redis-cache
  • 👅 Добавить локализацию i18n
  • 📦 Модульные тесты
  • 🧑‍💻 Интеграционные тесты
  • ✍️ Добавить eslint
  • 💂 TypeScript