
Доброго времени суток, друзья!
В поисках вдохновения наткнулся на этот замечательный туториал, посвященный разработке «социального» клиент-серверного приложения на MERN + GraphQL.
Решил его расшифровровать и немного доработать для заинтересованных. Расшифровка означает, что каждая строка кода снабжена подробным комментарием. Доработка состоит в добавлении аватара пользователя и исправлении нескольких критичных для работы приложения ошибок.
Код проекта находится здесь.
Основные возможности приложения
- Регистрация/авторизация пользователей
- Добавление/удаление постов
- Лайк/дизлайк постов
- Добавление/удаление комментариев к постам
- Отображение количества лайков и комментариев
Стек технологий
Сервер:
- Apollo Server
- GraphQL + GraphQL Tag
- Mongoose
- JSON Web Token
- Bcrypt
- Supervisor
- Concurrently
Клиент:
- React
- ReactDOM
- React Router DOM
- Apollo Client
- GraphQL + GraphQL Tag
- JWT Decode
- React Loader Spinner
- Semantic UI React
Структура проекта
- client - клиент - public - index.html - шаблон разметки - src - modules - components - CommentButton.js - кнопка для комментария - DeleteButton.js - кнопка для удаления поста или комментария - LikeButton.js - кнопка для лайка - MenuBar.js - панель навигации - PostCard.js - карточка поста, используемая на главной странице - PostForm.js - форма для добавления нового поста - index.js - агрегация компонентов - context - auth.js - контекст с информацией об аутентификации - ... - pages - Home.js - главная/домашняя страница - Login.js - страница авторизации - Register.js - страница регистрации - SinglePost.js - страница одного поста - index.js - агрегация страниц - utils - Loader.js - индикатор загрузки - MyPopup.js - всплывающая подсказка - authRoute.js - утилита для приватного роутинга - convertImg.js - утилита для преобразования изображения в base64-строку - formatDate.js - утилита для форматирования даты - useForm.js - кастомный хук для работы с формой - index.js - агрегация утилит - graphql.js - запросы и мутации graphql - ApolloProvider - провайдер, позволяющий установить связь с сервером - App.css - коррекция стилей semantic - App.js - основной компонент приложения - index.js - главный файл клиента, точка входа для Webpack - jsconfig.json - настройки компилятора - ... - graphql - resolvers - операции, выполняемые с данными в ответ на запрос или мутацию graphql - comments.js - мутации для комментариев - posts.js - запросы и мутации для постов - users.js - мутации для пользователей - index.js - агрегация запросов и мутаций - typeDefs.js - определения типов (моделей) данных, запросов и мутаций - models - Post.js - модель поста - User.js - модель пользователя - utils - check-auth.js - утилита для проверки аутентификации - validators.js - валидаторы для регистрации и авторизации - index.js - главный файл сервера - ...
Инструкция по установке и запуску находится в репозитории проекта.
Скриншоты приложения
По понятным причинам я не могу показать демо приложения, поэтому ограничусь скриншотами.
Регистрация

Авторизация

Главная страница

Страница поста

Удаление поста или комментария

База данных

Как всегда, буду рад любой форме обратной связи.
Благодарю за внимание и хорошего дня.
