Jest to projekt zaliczeniowy z przedmiotu TIN.
Projekt przedstawia zastosowanie technologii NodeJS z użyciem frameworka ExpressJS wraz z aplikacją typu SPA z użyciem ReactJS. Wykorzystywana jest basa MySQL.
Aplikacja przedstawia przykład strony internetowej do przeglądania i dodwania przepisów kulinarnych.
Prerekwizyty do uruchomienia projektu:
- NodeJS (21+)
- Docker
- NPM
Aby uruchomić projekt z poziomu Dockera należy wykonać następujące kroki:
- Zbudowanie zależności frontendu
npm run prepare
- Zbudowanie obrazu Dockera
npm run build-docker
- Uruchomienie kontenerów Dockera
npm run start-docker
Do uruchomienia należy dodać również plik .env
w folderze server
z następującą zawartością:
MYSQL_HOST= # adres hosta bazy danych np. `127.0.0.1`
MYSQL_PORT= # port bazy danych np. 3306
MYSQL_USER= # użytkownik bazy danych np. node
MYSQL_PASSWORD= # hasło użytkownika bazy danych recipespass
MYSQL_DATABASE= # nazwa bazy danych np. recipes
MYSQL_ROOT_PASSWORD= # hasło roota bazy danych np. rootpass
SERVER_PORT= # port backendu np. 3001
APP_URL= # adres backendu, np. http://localhost:${SERVER_PORT}/
CLIENT_URL= # adres frontendu np. http://localhost:3000 - dev, http://localhost:${SERVER_PORT} - prod
DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}
EMAIL_USER= # adres email do wysyłania maili np. email@domena.xx
EMAIL_PASS= # hasło email do wysyłania maili
EMAIL_HOST= # adres hosta email np. smtp.domena.xx
EMAIL_PORT= # port hosta email np. 587
ACCESS_TOKEN_SECRET= # sekret JWT, wygenerować np. za pomocą crypto.randomBytes(64).toString('hex') <- nodejs
REFRESH_TOKEN_SECRET= # sekret JWT
Plik ten jest wykorzystywany przy użyciu docker compose, jak i w przypadku uruchomienia z poziomu NodeJS w środowisku developerskim.
Plik ten musi być utworzony, aby aplikacja działała poprawnie. Do testów można wykorzystać swoje prywatne konto mailowe (testowałem z ze skrzynką onet.pl, z gmail miałem problem z połączeniem).
Spowoduje to uruchomienie kontenerów Dockera z aplikacją backendową oraz bazą danych MySQL.
Moduł server
posiada konfigurację start
oraz dev
umożliwiające na uruchomienie aplikacji backendowej.
Niezbędne do tego jest jednakże przebudowanie frontendu za pomocą komendy npm run prepare
, co powoduje zbudowanie
aplikacji frontendowej i umieszczenie jej w folderze server/public
, skąd serwer ExpressJS będzie ją serwował statycznie.
W przypadku uruchomienia z poziomu webstorm należy wykonać komendę npm run prepare
oraz npm run dev
w folderze server
.
Aby uruchomić środowisko deweloperskie frontendu należy wykonać komendę npm run start
w folderze client
.
Projekt składa się z dwóch modułów:
server
- backend(nodejs, expressjs),client
- frontend (react).
W projekcie korzystam z bazy danych MySQL. W projekcie wykorzystywany jest ORM Prisma. Zapewnia on automatyczne generowanie schematu bazy danych na podstawie modeli oraz migracje.
Projektując bazę danych skorzystałem z MySQL Workbench. Następnie na podstawie utworzonego schematu wygenerowałem SQL.
Jest to plik init.sql
. Uruchomiłem ten plik na czystej bazie MySQL. Następnie wygenerowałem modele prismy przy użyciu
komendy npx prisma db pull
. W ten sposób wygenerowałem modele prisma na podstawie istniejącej bazy danych.
Aby wygenerować customowego clienta na podstawie modeli prisma należy wykonać komendę npx prisma generate
.
Aby zainicjować czystą bazę danych należy wykonać komendę npx prisma db push
, a następnie npx prisma db seed
,
co zasili bazę danyhc przykładowymi danymi.
Do uruchomienia bazy danych podczas developmentu można skorzystać z pliku compose.yml.
W tym celu należy wykonać komendę docker-compose up -d db
w folderze server
lub skorzystać z gotowych konfiguracji startowych Webstorm zapisanych w projekcie.