Skip to content

Базовый современный модульный RESTful API с аутентификацией на Express.js и PostgreSQL

Notifications You must be signed in to change notification settings

woookle/express-pg

Repository files navigation

🚀 Express-PG - Современный API для аутентификации

Node.js Express.js PostgreSQL JWT

Современный модульный RESTful API с аутентификацией на Express.js и PostgreSQL

✨ Возможности

  • 🔐 JWT аутентификация с безопасными httpOnly cookies
  • 🗄️ PostgreSQL база данных с пулом соединений
  • 🛡️ Хеширование паролей с использованием bcryptjs
  • 📦 ES6 модули для современного JavaScript
  • 🎯 Модульная архитектура для масштабируемости
  • 🔒 Валидация входных данных и обработка ошибок
  • 🍪 Сессии на основе cookies для безопасности
  • 🚀 Конфигурация окружения с dotenv

🛠️ Технологический стек

  • Среда выполнения: Node.js
  • Фреймворк: Express.js
  • База данных: PostgreSQL
  • Аутентификация: JWT + bcryptjs
  • Безопасность: httpOnly cookies, валидация входных данных
  • Структура: ES6 модули, MVC паттерн

📦 Установка

Предварительные требования

  • Node.js (v16 или выше)
  • PostgreSQL (v12 или выше)
  • npm или yarn

1. Клонируйте репозиторий

git clone https://github.com/woookle/express-pg.git
cd express-pg

2. Установите зависимости

npm install

3. Настройка базы данных

-- Подключитесь к PostgreSQL и создайте базу данных
CREATE DATABASE auth_demo;

-- Создайте таблицы (выполните в базе данных auth_demo)
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE posts (
    id SERIAL PRIMARY KEY,
    user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
    title VARCHAR(200) NOT NULL,
    content TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4. Конфигурация окружения

# Скопируйте файл окружения
cp .env.example .env

# Отредактируйте .env с вашей конфигурацией
nano .env

Пример файла .env:

NODE_ENV=development
PORT=3000

DB_USER=postgres
DB_HOST=localhost
DB_NAME=auth_demo
DB_PASSWORD=your_password
DB_PORT=5432

JWT_SECRET=your-super-secret-key-change-in-production
JWT_EXPIRES_IN=24h

COOKIE_MAX_AGE=86400000

5. Запустите приложение

# Режим разработки
npm run dev

# Продакшен режим
npm start

🎯 Документация API

Эндпоинты аутентификации

Метод Эндпоинт Описание Требуется аутентификация
POST /api/auth/register Регистрация нового пользователя
POST /api/auth/login Вход пользователя
POST /api/auth/logout Выход пользователя
GET /api/auth/me Получить текущего пользователя

Эндпоинты пользователя

Метод Эндпоинт Описание Требуется аутентификация
GET /api/users/dashboard Получить дашборд пользователя
PUT /api/users/profile Обновить профиль пользователя

Проверка здоровья

Метод Эндпоинт Описание
GET /api/health Статус здоровья сервера

📝 Примеры использования API

🔐 Регистрация

POST /api/auth/register
Content-Type: application/json

{
  "username": "ivanov",
  "email": "ivan@example.com",
  "password": "securepassword123"
}

Ответ:

{
  "success": true,
  "message": "Пользователь успешно зарегистрирован",
  "data": {
    "user": {
      "id": 1,
      "username": "ivanov",
      "email": "ivan@example.com",
      "created_at": "2023-10-05T12:00:00.000Z"
    }
  }
}

🔑 Вход

POST /api/auth/login
Content-Type: application/json

{
  "email": "ivan@example.com",
  "password": "securepassword123"
}

Ответ:

{
  "success": true,
  "message": "Вход выполнен успешно",
  "data": {
    "user": {
      "id": 1,
      "username": "ivanov",
      "email": "ivan@example.com",
      "created_at": "2023-10-05T12:00:00.000Z"
    }
  }
}

👤 Получить профиль

GET /api/auth/me

Ответ:

{
  "success": true,
  "message": "Данные профиля успешно получены",
  "data": {
    "user": {
      "id": 1,
      "username": "ivanov",
      "email": "ivan@example.com",
      "created_at": "2023-10-05T12:00:00.000Z"
    }
  }
}

🏗️ Структура проекта

express-pg/
├── config/
│   ├── database.js      # Конфигурация PostgreSQL
│   └── constants.js     # Переменные окружения
├── controllers/
│   ├── authController.js # Логика аутентификации
│   └── userController.js # Операции с пользователями
├── middleware/
│   ├── authMiddleware.js # JWT аутентификация
│   └── validationMiddleware.js # Валидация входных данных
├── routes/
│   ├── authRoutes.js    # Маршруты аутентификации
│   └── userRoutes.js    # Маршруты пользователей
├── utils/
│   └── bcrypt.js        # Утилиты для паролей
├── app.js               # Настройка Express приложения
├── server.js            # Точка входа сервера
└── .env                 # Переменные окружения

🔧 Скрипты

npm run dev     # Запуск сервера разработки с nodemon
npm start       # Запуск продакшен сервера

хорошего дня 😊

About

Базовый современный модульный RESTful API с аутентификацией на Express.js и PostgreSQL

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published