An enterprise Hapi template application built using Nodejs showcasing - Testing Strategies, DB seeding & migrations, integration with an ORM, containerization using Docker, REST Apis, a middleware for authorization, redis caching, rate limited endpoints, paginated endpoints, and directory based routing
We’re always looking for people who value their work, so come and join us. We are hiring!
- Dockerization
- Authorization middleware
- Redis Cache
- Rate Limited endpoints
- Paginated endpoints
- Swagger UI
- Support for directory based routing
- Simplified support for migrations and seeders using sequelize
- DAO layer for all database interactions
- Tests using jest
- node
- docker
- docker-compose
- mysql
- redis
-
Install dependencies using npm
npm install
- Run
./scripts/setup-local.sh
- This will seed the data in mysql and run the server.
- Automatically generate bare sequelize models from your database.
https://github.com/sequelize/sequelize-auto
Example:
sequelize-auto -o "./models" -d temp_dev -h localhost -u root -p 3306 -x password -e mysql
Sequelize is a promise-based ORM for Node.js. It supports the dialects PostgreSQL, MySQL, SQLite and MSSQL and features solid transaction support, relations, read replication and more.
Install Sequelize:
npm install -g sequelize-cli
Full documentation: https://sequelize.readthedocs.io/en/latest/
Install MySQL
-
brew install mysql
-
This helps in accessing the database(
temp_dev
)
ALTER USER '@root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
;
To Access mysql
-
mysql -uroot -p
-
This will ask for password and the altered password is
password
-
Start Server
mysql.server start
-
Stop Server
mysql.server stop
Install
brew install redis
Start
brew services start redis
Stop
brew services stop redis
With migrations you can transfer your existing database into another state and vice-versa.
Setting up Sequelize Migrations for a initial database
Steps
- Create a
resources
folder - Create individual
.sql
files for each table and add it sequentially, by prefixing by 01,02 & so on. - Each file should contain the proper sql syntax.
- Point the migration files to
/resources/v1
- Run
npx sequlize db:migrate
Structure with example
/
migrations/
20191014145811-initial-migration.js
resources/
v1/
01_create_school.sql
02_create_student.sql
Database State Changes
- Create a migration file that prefixes with the timestamp add it in the
/migrations
folder. Ex:20191014145811-alter-student.js
- Add the .sql file in the
/resources/v2
- Point the new migration file to
/resources/v2
- Run
npx sequlize db:migarte --name migartions/20191014145811-alter-student.js
Structure
/
migrations/
20191015143811-initial-migration.js
20191014145811-alter-student.js
resources/
v1/
01_create_school.sql
02_create_student.sql
v2/
03_alter_student.sql