- Добавлена страница личного кабинета с возможностью загрузки аватарки - Реализовано управление аватарками: загрузка, удаление, предварительный просмотр - Исправлено отображение аватарки на странице профиля (центрирование) - Убрано отображение аватарки со страницы заметок для чистоты интерфейса - Обновлен .gitignore с исключениями для загруженных файлов и временных файлов - Обновлен README.md с документацией по новым функциям - Добавлена валидация загружаемых файлов (тип, размер, формат) - Улучшена безопасность с изоляцией пользовательских данных
11 KiB
11 KiB
NoteJS - Приложение для быстрых заметок
Простое веб-приложение для создания и управления заметками с поддержкой Markdown форматирования и системой аутентификации.
Особенности
- 🚀 Создано на Node.js + Express
- 🔐 Система регистрации и авторизации по логину и паролю
- 🔒 Безопасное хранение паролей с bcrypt хешированием
- 💾 Хранение данных в SQLite базе данных
- 👥 Изолированные заметки - каждый пользователь видит только свои заметки
- 👤 Личный кабинет с возможностью загрузки аватарки (NEW!)
- 🖼️ Управление аватаркой: загрузка, удаление, предварительный просмотр (NEW!)
- 📝 Поддержка Markdown форматирования
- 🏷️ Система тегов с автоматическим извлечением из заметок (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
- Изменить пароль: введите текущий пароль и новый пароль
Поиск и фильтрация
- Поиск по заметкам: используйте поле поиска в левой панели для поиска по содержимому заметок
- Фильтрация по тегам: кликайте на теги в левой панели для фильтрации заметок
- Навигация по календарю: кликайте на даты в мини-календаре для просмотра заметок за определенный день
Теги
- Теги автоматически извлекаются из заметок при использовании символа
#(например:#важное) - Теги отображаются в левой панели с количеством заметок
- Кликабельные теги в заметках позволяют быстро фильтровать контент
Выход из системы
Нажмите кнопку "🚪 Выйти" в верхней части страницы заметок
Структура проекта
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.