В этот репозиторий я буду продолжать добавлять лучшие практики производства, которым мы должны следовать в проекте MERN (MongoDB, Express.js, React.js и Node.js). Также для улучшения пользовательского интерфейса я использую Antd Pro. Возможно, позже я тоже буду использовать MUI.
Ниже приведен образец страницы со списком:
Как следует из названия, этот репозиторий построен на основе Express.js и React.js, однако в деталях реализации мы найдем и другие вспомогательные технологии.
Подробности о платформах и пакетах можно найти в файлах package.json в каталоге сервера и клиента.
Этот проект можно запустить в основном двумя способами. Один использует докер, другой способ — запустить вручную через vscode.
В зависимости от варианта хостинга MongoDB мы выбираем соответствующий файл docker-compose.
В настоящее время у нас есть два файла docker-compose:
docker-compose.mongocloud.yml
— кластер, размещенный на MongoDB.comdocker-compose.yml
— локальный контейнер MongoDB. MONGODB_CLOUD_URL
в docker-compose.mongocloud.yml
на соответствующий URL-адрес MongoDB.REACT_APP_API_URL
в docker-compose.yml
на соответствующий URL-адрес API. Если мы хотим предоставить нашему клиенту доступ к Интернету, нам нужно изменить REACT_APP_API_URL
на соответствующий URL-адрес API. В противном случае сохраните REACT_APP_API_URL
как http://localhost:8002
.Запуск команд docker-compose
Ожидается, что на машине должны быть установлены docker и docker-compose. Перейдите в корень репозитория и выполните соответствующие команды. Это запустит серверный и клиентский контейнеры вместе с контейнером MongoDB (если мы используем локальный сервер MongoDB) внутри среды Docker.
Использование докер-контейнеров с облачным хранилищем MongoDB
> cd project-root
> docker-compose -f docker-compose.mongocloud.yml build
> docker-compose -f docker-compose.mongocloud.yml up
Использование докер-контейнеров с локальной MongoDB
> cd project-root
> docker-compose build
> docker-compose up
Клиент и сервер запущены и работают, и мы должны увидеть следующий экран, если перейдем к URL-адресу клиента.
исходные данные. Зайдите в контейнер докера и выполните приведенные ниже команды. Это заполнит базу данных roles
, users
и данными products
.
docker exec -it appserver bash
npm run db:seed
npm run db:migrate
Вы должны увидеть следующий вывод:
Теперь вы должны войти в приложение и просмотреть список продуктов.
Чтобы запустить через vscode, нам следует запустить проекты на стороне сервера и клиента отдельно, а также убедиться, что mongodb запущен и работает.
Создайте файл .env
внутри каталога server
. Добавьте приведенные ниже записи или измените их соответствующим образом. Вы можете просмотреть файл .env.sample
, чтобы увидеть формат.
DB_HOST=localhost
DB_PORT=27017
DB_NAME=appdb
JWT_SECRET=secret
JWT_EXPIRES_IN=3600
PORT=5000
IS_MONGODB_CLOUD_URL=false
MONGODB_CLOUD_URL=mongodb+srv:// <USER >: <PASSWORD >@cluster0.abcd.mongodb.net/myFirstDatabase?retryWrites=true
Мы предполагаем, что запускаем MongoDB в контейнере докеров.
cd server
npm i
npm run db:up
npm start
cd client-pro
nvm use --lts
yarn
yarn start
Чтобы заполнить базу данных, нам нужно выполнить следующие команды в контейнере докеров. Вы также можете запускать эти команды в терминале, если вы запускаете сервер и клиент вне среды докера. Я предполагаю, что мы запускаем сервер приложений в контейнере докеров.
docker exec -it appserver bash
npm run db:seed
npm run db:migrate
Вы должны увидеть имя пользователя и пароль в файле /server/setup/users.json
.
Я представил пользовательский интерфейс управления разрешениями для приложения. Пример изображения приведен ниже.
Sentry.io
Мы также можем отправить логи на sendry.io. Чтобы использовать эту функцию, нам нужно добавить запись dsn
в client/src/env.config.js
. Фрагмент настройки приведен ниже в файле index.js
.
Sentry . init ( {
dsn : Config . dsn ,
integrations : [ new Integrations . BrowserTracing ( ) ] ,
tracesSampleRate : 1.0 ,
} ) ;
server
Чтобы просмотреть API, откройте браузер и посетите http://localhost:5000/api-docs
В идеале нам следует добавить все конечные точки API в swagger, но для демонстрационных целей мы добавили только конечную точку API продуктов.
Чтобы протестировать API, мы можем повторно использовать коллекцию почтальона. Откройте docs/rbac-mern-boilerplate.postman_collection.json
в Postman, и вы увидите конечные точки с соответствующими полезными данными.
Проект | Команда | Задача |
---|---|---|
корень | npm run build | Строит контейнеры |
корень | npm run start | Запускайте проекты и базу данных в докер-контейнерах. |
корень | docker exec -it appserver /bin/sh затем npm run db:seed | Выпускает семенную продукцию внутри контейнера |
сервер | npm i | Установите зависимости на стороне сервера |
сервер | npm run db:up | Запустите базу данных в Docker-контейнере. |
сервер | npm run test | Выполнение тестов с помощью jest |
клиент | npm i | Установите зависимости на стороне клиента |
клиент | npm run start | Запустите приложение реагирования |
клиент | npm run build | Создайте приложение реагирования в производственном режиме. |
клиент | npm run test | Выполнение тестов с использованием Testing Library |
В этот репозиторий мы включили как модульное тестирование, так и интеграционное тестирование. На данный момент покрытие кода очень низкое, но мы работаем над этим, чтобы где-то в будущем оно превысило 90%.
localStorage
и axios
. Чтобы запустить тесты, мы можем запустить команду npm run test
.
Jest
в качестве библиотеки тестирования, а также добавили пакеты supertest
и mongodb-memory-server
, чтобы упростить интеграционное тестирование.Jest
для тестирования уровней сервиса и имитации внешних зависимостей, таких как MongoDB
. Чтобы запустить тесты, мы можем запустить команду npm run test
.
Этот проект имеет лицензию MIT.
На данный момент я не принимаю никаких вкладов сообщества в отношении кода. Но если у вас есть какие-либо предложения или вы обнаружили какие-либо ошибки, пожалуйста, не стесняйтесь открыть проблему или запрос на включение.
С другой стороны, если вы хотите что-то узнать или начать обсуждение этого проекта, начните обсуждение на нашей доске обсуждений GitHub.
Я записывал этапы кодирования этого проекта. Вы можете найти видео в плейлисте YouTube. Эти видео доступны только на бенгальском языке , но я буду рад провести специальные платные сеансы на английском языке для заинтересованной международной аудитории. Не стесняйтесь обращаться ко мне по адресу [email protected] за любой помощью.
Спасибо. Ваше здоровье.