- Добавлено разворачивание заметки при редактировании для улучшения пользовательского опыта - Скрыта кнопка "Показать полностью" во время редактирования, если она присутствует
NoteJS - Приложение для быстрых заметок
Простое веб-приложение для создания и управления заметками с поддержкой Markdown форматирования и системой аутентификации.
Особенности
- 🚀 Создано на Node.js + Express
- 🔐 Система регистрации и авторизации по логину и паролю
- 🔒 Безопасное хранение паролей с bcrypt хешированием
- 💾 Хранение данных в SQLite базе данных
- 👥 Изолированные заметки - каждый пользователь видит только свои заметки
- 👤 Личный кабинет с возможностью загрузки аватарки (NEW!)
- 🖼️ Управление аватаркой: загрузка, удаление, предварительный просмотр (NEW!)
- 📝 Поддержка Markdown форматирования
- 🏷️ Система тегов с автоматическим извлечением из заметок (NEW!)
- 🔍 Поиск по заметкам с подсветкой результатов (NEW!)
- 📅 Мини-календарь для навигации по датам заметок (NEW!)
- 📱 Адаптивный дизайн с боковым слайдером на мобильных (NEW!)
- ☰ Мобильный боковой слайдер с календарём, поиском и тегами (NEW!)
- 🎨 Простой и интуитивный интерфейс
- 📱 Адаптивный дизайн
Установка и запуск
Предварительные требования
- Node.js (версия 14 или выше)
- npm
Установка
- Клонируйте репозиторий:
git clone <repository-url>
cd NoteJS
- Установите зависимости:
npm install
- Настройте переменные окружения:
- Откройте файл
.env - Установите секрет сессии в переменной
SESSION_SECRET - Установите порт в переменной
PORT(по умолчанию 3000)
- Откройте файл
Пример файла .env:
SESSION_SECRET=your_session_secret_here
PORT=3000
- Запустите сервер:
npm start
- Откройте браузер и перейдите по адресу
http://localhost:3000
Использование
Регистрация
- Нажмите на ссылку "Зарегистрируйтесь" на странице входа
- Заполните форму регистрации:
- Логин: минимум 3 символа
- Пароль: минимум 6 символов
- Подтвердите пароль: повторите пароль
- Нажмите кнопку "Зарегистрироваться"
- Вы будете автоматически залогинены и перенаправлены на страницу заметок
Вход в систему
- Введите ваш логин
- Введите ваш пароль
- Нажмите кнопку "Войти"
- После успешного входа вы попадете в интерфейс заметок
Создание заметок
- Введите текст заметки в поле ввода
- Используйте кнопки форматирования для добавления Markdown элементов:
- B - жирный текст
- I - курсив
- H - заголовок
- 📋 - элемент списка
- " - цитата
</>- код- 🔗 - ссылка
- Нажмите кнопку "Сохранить"
Редактирование заметок
- Нажмите кнопку "Редактировать" рядом с заметкой
- Отредактируйте текст в появившемся поле ввода
- Нажмите кнопку "Сохранить"
Удаление заметок
- Нажмите кнопку "Удалить" рядом с заметкой
- Подтвердите удаление в появившемся диалоговом окне
Личный кабинет
- Нажмите на ваше имя пользователя в верхней части страницы заметок
- В личном кабинете вы можете:
- Загрузить аватарку: нажмите "Загрузить аватар" и выберите изображение (JPG, PNG, GIF до 5 МБ)
- Удалить аватарку: нажмите кнопку "Удалить" рядом с аватаркой
- Изменить данные профиля: отредактируйте логин и email
- Изменить пароль: введите текущий пароль и новый пароль
Поиск и фильтрация
- Поиск по заметкам: используйте поле поиска в левой панели для поиска по содержимому заметок
- Фильтрация по тегам: кликайте на теги в левой панели для фильтрации заметок
- Навигация по календарю: кликайте на даты в мини-календаре для просмотра заметок за определенный день
Теги
- Теги автоматически извлекаются из заметок при использовании символа
#(например:#важное) - Теги отображаются в левой панели с количеством заметок
- Кликабельные теги в заметках позволяют быстро фильтровать контент
Выход из системы
Нажмите кнопку "🚪 Выйти" в верхней части страницы заметок
Мобильная версия
Боковой слайдер на мобильных устройствах
На мобильных устройствах (ширина экрана до 768 пикселей) вместо постоянной левой панели появляется удобный боковой слайдер с кнопкой "☰" в левом верхнем углу.
Функциональность мобильного слайдера:
- Кнопка открытия - нажмите на кнопку "☰" в левом верхнем углу экрана
- Содержимое слайдера включает все основные инструменты:
- 📅 Календарь - полностью функциональный календарь месяца с навигацией
- 🔍 Поле поиска - синхронизировано с основным полем поиска
- 🏷️ Теги - все теги с количеством заметок
- Закрытие слайдера:
- Нажмите кнопку ✕ в верхнем правом углу слайдера
- Нажмите на серую область (оверлей) справа
- Синхронизация - изменения в слайдере (выбор даты, ввод текста, клик на тег) автоматически синхронизируются с основной ПК версией
Преимущества мобильного слайдера:
- ✅ Полная функциональность как в ПК версии
- ✅ Экономия места на экране мобильного устройства
- ✅ Легкое открытие/закрытие
- ✅ Удобная навигация по заметкам
- ✅ Не блокирует контент при открытии (использует оверлей)
Структура проекта
NoteJS/
├── public/ # Статические файлы (клиентская часть)
│ ├── index.html # Страница входа
│ ├── register.html # Страница регистрации
│ ├── notes.html # Страница заметок
│ ├── profile.html # Страница личного кабинета (NEW!)
│ ├── login.js # Логика входа
│ ├── register.js # Логика регистрации
│ ├── profile.js # Логика личного кабинета (NEW!)
│ ├── app.js # Клиентский JavaScript (обновлен)
│ ├── style.css # Стили (обновлены)
│ └── uploads/ # Загруженные аватарки пользователей (NEW!)
├── server.js # Express сервер (обновлен)
├── .env # Конфигурация (не включать в git!)
├── .gitignore # Исключения для git (обновлен)
├── package.json # Зависимости проекта
├── notes.db # SQLite база данных (создается автоматически)
└── README.md # Документация
API Endpoints
Аутентификация
GET /- страница входаGET /register- страница регистрацииPOST /api/register- регистрация нового пользователяPOST /api/login- вход в системуPOST /logout- выход из системыGET /api/user- получить информацию о текущем пользователе (требует аутентификации)
Профиль пользователя (требует аутентификации)
GET /profile- страница личного кабинетаPUT /api/user/profile- обновить данные профиля или парольPOST /api/user/avatar- загрузить аватаркуDELETE /api/user/avatar- удалить аватарку
Заметки (требуют аутентификации)
GET /notes- страница заметокGET /api/notes- получить все заметки пользователяPOST /api/notes- создать новую заметкуPUT /api/notes/:id- обновить заметкуDELETE /api/notes/:id- удалить заметку
Безопасность
- Bcrypt хеширование паролей при сохранении
- Сессионная аутентификация с express-session
- Helmet для защиты от распространенных уязвимостей
- CORS конфигурация
- Body Parser для безопасной обработки запросов
- Multer для безопасной загрузки файлов с валидацией
- Защищенные маршруты с проверкой аутентификации
- Валидация загружаемых файлов: проверка типа, размера и формата
- Изоляция данных: каждый пользователь видит только свои заметки и файлы
Требования к паролям
- Минимум 6 символов при регистрации
- Пароли хешируются с использованием bcrypt (стандарт раундов: 10)
- Пароли не могут быть восстановлены из БД
Требования к логину
- Минимум 3 символа
- Должен быть уникальным (нельзя создать два аккаунта с одинаковым логином)
Требования к аватаркам
- Максимальный размер: 5 МБ
- Поддерживаемые форматы: JPG, PNG, GIF
- Автоматическое изменение размера: изображения автоматически обрезаются до квадратного формата
- Безопасность: проверка типа файла и размера перед загрузкой
Разработка
Для разработки используйте:
npm run dev
Этот скрипт использует nodemon для автоматической перезагрузки сервера при изменении файлов. Больше не нужно вручную перезапускать сервер при каждом изменении кода!
Лицензия
Этот проект создан Fovway.
Календарь
На странице заметок слева расположен интерактивный календарь, который позволяет:
- 📅 Просмотреть текущий месяц с выделением сегодняшней даты
- ◀️ Переключаться между месяцами с помощью кнопок навигации
- 🔗 Выбирать даты для фильтрации заметок (функция может быть расширена)
- 📱 Адаптивность - на мобильных устройствах календарь располагается на всю ширину выше формы
Характеристики календаря
- Сегодняшний день выделен синим цветом
- Выбранный день отмечен зелёным цветом
- Дни из соседних месяцев отображаются серым цветом
- Календарь использует русские названия месяцев и дней недели
- Полностью функционален без необходимости в дополнительных библиотеках
Description
Languages
JavaScript
72.5%
CSS
15.2%
HTML
12.3%