https://github.com/wednesday-solutions/nodejs-hapi-template
A Nodejs hapi boilerplate application with out of the box support for Docker, Redis cache, DB migrations and seeders, rate limiting, and paginated endpoints.
https://github.com/wednesday-solutions/nodejs-hapi-template
authentication database dockerization hapi mysql sequelize swagger swaggerui wurst
Last synced: about 2 months ago
JSON representation
A Nodejs hapi boilerplate application with out of the box support for Docker, Redis cache, DB migrations and seeders, rate limiting, and paginated endpoints.
- Host: GitHub
- URL: https://github.com/wednesday-solutions/nodejs-hapi-template
- Owner: wednesday-solutions
- License: mit
- Created: 2019-12-11T09:20:43.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-10-08T11:00:52.000Z (8 months ago)
- Last Synced: 2025-04-13T21:12:55.335Z (about 2 months ago)
- Topics: authentication, database, dockerization, hapi, mysql, sequelize, swagger, swaggerui, wurst
- Language: JavaScript
- Homepage: https://wednesday.is/building-products/?utm_source=github&utm_medium=nodejs-hapi-template
- Size: 2.33 MB
- Stars: 30
- Watchers: 4
- Forks: 20
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
Node Hapi Template
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
---
Expert teams of digital product strategists, developers, and designers.
---
We’re always looking for people who value their work, so come and join us. We are hiring!

![]()
![]()
![]()
![]()
---
## Out of the box support for
- 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## Setup and Configuration.
### Pre-requisites
- node
- docker
- docker-compose
- mysql
- redis### Installation
- Install dependencies using npm
- `npm install`
### Setup
- Run `./scripts/setup-local.sh`
- This will seed the data in mysql and run the server.### Auto Generate models from database
- 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
[Sequelize](https://sequelize.readthedocs.io/en/latest/) 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/
### MySQL Setup
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`
### redis SetupInstall
- `brew install redis`Start
- `brew services start redis`
Stop
- `brew services stop redis`
### Migrations
With migrations you can transfer your existing database into another state and vice-versa.
**Setting up Sequelize Migrations for a initial database**
Steps
1. Create a `resources` folder
2. Create individual `.sql` files for each table and add it sequentially, by prefixing by 01,02 & so on.
3. Each file should contain the proper sql syntax.
4. Point the migration files to `/resources/v1`
5. 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**
1. Create a migration file that prefixes with the timestamp add it in the `/migrations` folder. Ex: `20191014145811-alter-student.js`
2. Add the .sql file in the `/resources/v2`
3. Point the new migration file to `/resources/v2`
4. 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```