Skip to content

курсовая работа Емельяненко Савелия. Выполнена на node.js

License

Notifications You must be signed in to change notification settings

sava11/ImageBoard

Repository files navigation

ImageBoard - Онлайн галерея изображений

ImageBoard - это веб-приложение для публикации и просмотра изображений с системой рейтинга, тегов и пользовательскими профилями. Проект разработан на Node.js с использованием Express.js, MySQL и Handlebars шаблонов.

Возможности

Основной функционал

  • Регистрация и аутентификация пользователей с ролевой системой (пользователь/редактор/администратор)
  • Загрузка изображений с описаниями и тегами
  • Галерея изображений с фильтрацией и поиском
  • Система рейтинга (лайки/дизлайки) для изображений
  • Управление постами (редактирование, удаление)
  • Профили пользователей с персональной статистикой
  • Рекламная система для показа баннеров

Дополнительные возможности

  • Диаграммы аналитики количества постов по дням
  • Экспорт данных в CSV формате
  • Многоуровневая система прав доступа
  • Безопасная загрузка файлов с валидацией
  • Rate limiting для защиты от злоупотреблений
  • Обработка ошибок с подробным логированием

Технологии

Backend

  • Node.js - JavaScript runtime
  • Express.js - Веб-фреймворк
  • MySQL - База данных
  • Knex.js - SQL query builder (не используется активно)
  • bcrypt - Хеширование паролей
  • express-session - Управление сессиями
  • multer - Загрузка файлов
  • express-rate-limit - Ограничение запросов

Frontend

  • Handlebars (HBS) - Шаблонизатор
  • Vanilla JavaScript - Клиентский JavaScript
  • CSS3 - Стилизация
  • D3.js - Создание диаграмм

Инструменты разработки

  • dotenv - Управление переменными окружения
  • Nodemon - Автоматический перезапуск сервера
  • ESLint - Линтинг кода

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

ImageBoard/
├── app.js                          # Главный файл приложения
├── package.json                    # Зависимости и скрипты
├── create_site.sql                 # Схема базы данных
├── middleware/                     # Промежуточное ПО
│   ├── errorHandler.js            # Обработка ошибок
│   ├── rateLimiter.js             # Ограничение запросов
│   └── validation.js              # Валидация данных
├── controllers/                    # Контроллеры приложения
│   ├── homeController.js          # Главная страница
│   ├── userController.js          # Управление пользователями
│   ├── postController.js          # Управление постами
│   ├── imageController.js         # API изображений
│   └── advController.js           # Рекламная система
├── routes/                         # Маршрутизаторы
│   ├── homeRouter.js              # Маршруты главной страницы
│   ├── userRouter.js              # Маршруты пользователей
│   ├── postRouter.js              # Маршруты постов
│   ├── imageRouter.js             # API маршруты изображений
│   └── advRouter.js               # Маршруты рекламы
├── views/                          # Шаблоны Handlebars
│   ├── data.hbs                   # Главная страница
│   ├── post.hbs                   # Просмотр поста
│   ├── upload.hbs                 # Загрузка изображения
│   ├── auth/                      # Формы аутентификации
│   └── profile/                   # Страницы профиля
├── public/                         # Статические файлы
│   ├── css/                       # Стили
│   ├── js/                        # Клиентский JavaScript
│   └── imgs/                      # Изображения интерфейса
├── imgs/                          # Загруженные изображения
│   ├── uploads/                   # Пользовательские изображения
│   └── advertisements/            # Рекламные баннеры
├── dataBase/                       # Конфигурация БД
│   └── db.js                      # Подключение к MySQL
├── models/                         # Модели данных (пока не используется)
├── selenium_tests/                # Автоматизированные тесты
├── UnitTests/                     # Модульные тесты
└── exports/                       # Экспортированные файлы

Установка и запуск

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

  • Node.js (версия 14 или выше)
  • MySQL (версия 5.7 или выше)
  • npm или yarn

1. Клонирование репозитория

git clone https://github.com/sava11/ImageBoard.git
cd ImageBoard

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

npm install

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

# Создайте базу данных MySQL
mysql -u root -p < create_site.sql

4. Настройка переменных окружения

Создайте файл .env в корне проекта:

# Настройки базы данных
DB_HOST=localhost
DB_USER=your_db_user
DB_PASSWORD=your_db_password
DB_NAME=site

# Секретный ключ для сессий и JWT
SECRET_KEY=your_super_secret_key_here

# Настройки сервера
PORT=3000
NODE_ENV=development

# Папка для загрузки изображений
UPLOAD_DIR=imgs/uploads

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

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

# Или с автоматической перезагрузкой
npx nodemon app.js

Сервер будет доступен по адресу: http://localhost:3000

Аутентификация и роли пользователей

Роли пользователей

  1. Пользователь (User) - базовая роль, может загружать и оценивать изображения
  2. Редактор (Editor) - может редактировать и удалять любые посты
  3. Администратор (Admin) - полный доступ ко всем функциям

Тестовые аккаунты

После выполнения create_site.sql будут созданы следующие тестовые пользователи:

Логин Email Пароль Роль
user1 1@1 password123 Пользователь
editor1 2@1 password123 Редактор
admin1 3@1 password123 Администратор

API Endpoints

Пользователи

  • GET /user/register - Форма регистрации
  • POST /user/register - Регистрация пользователя
  • GET /user/login - Форма входа
  • POST /user/login - Вход в систему
  • GET /user/:id - Просмотр профиля
  • POST /user/logout - Выход из системы

Посты

  • GET /post/upload - Форма загрузки изображения
  • POST /post/upload - Загрузка изображения
  • GET /post/:id - Просмотр поста
  • GET /post/edit/:id - Форма редактирования
  • POST /post/edit/:id - Редактирование поста
  • GET /post/delete/:id - Удаление поста

API изображений

  • GET /image/ - Получение изображений с фильтрами
  • GET /image/:id - Получение файла изображения
  • GET /image/from-user/:id - Изображения пользователя
  • GET /image/tags/search - Поиск тегов

Аналитика (только для администраторов)

  • GET /post/diagram - Диаграмма постов по дням
  • GET /post/diagram-data - Данные для диаграммы
  • GET /post/diagram-data-download - Скачать CSV

Безопасность

Реализованные меры безопасности

  • SQL Injection защита - использование prepared statements
  • XSS защита - санитизация входных данных
  • CSRF защита - HttpOnly куки
  • Rate limiting - ограничение количества запросов
  • Валидация файлов - проверка типа и размера файлов
  • Пароль хеширование - bcrypt с salt rounds
  • Сессионная безопасность - secure cookies в продакшене

Rate Limits

  • API запросы: 100 запросов за 15 минут
  • Аутентификация: 5 попыток за 15 минут
  • Загрузка файлов: 10 файлов за час

Тестирование

Модульные тесты

cd UnitTests
npm install
npm test

Selenium тесты

# Установите Python и Selenium
pip install selenium webdriver-manager
python selenium_tests/test.py

Производительность

Оптимизации

  • Database indexing - индексы на часто используемых полях
  • Connection pooling - пул соединений MySQL
  • File caching - кеширование статических файлов
  • Lazy loading - отложенная загрузка изображений

Мониторинг

  • Error logging - подробное логирование ошибок
  • Request monitoring - отслеживание запросов
  • Database query optimization - оптимизированные запросы

Разработка

Добавление новых функций

  1. Создайте контроллер в папке controllers/
  2. Добавьте маршруты в routes/
  3. Создайте шаблоны в views/
  4. Добавьте стили в public/css/

Соглашения по коду

  • ES6+ синтаксис для JavaScript
  • JSDoc комментарии для документирования
  • async/await для асинхронных операций
  • Prepared statements для SQL запросов
  • Middleware pattern для переиспользуемой логики

Лицензия

ISC License - см. файл LICENSE для подробностей.

Авторы

  • sava11 - Разработчик

Вклад в проект

  1. Fork проект
  2. Создайте feature branch (git checkout -b feature/AmazingFeature)
  3. Commit изменения (git commit -m 'Add some AmazingFeature')
  4. Push в branch (git push origin feature/AmazingFeature)
  5. Откройте Pull Request

Поддержка

Если у вас возникли вопросы или проблемы:

  1. Проверьте Issues
  2. Создайте новый issue с подробным описанием проблемы
  3. Свяжитесь с разработчиком

Примечание: Это учебный проект для демонстрации навыков разработки веб-приложений на Node.js. Не используйте в продакшене без дополнительной настройки безопасности и оптимизации.

About

курсовая работа Емельяненко Савелия. Выполнена на node.js

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published