Just Boilerplate Express with TypeScript ( 🦊 )
- npm >=
v6.x
- node >=
v10.x
- eslint
v7.x
- husky >=
v5.x
- Familiar with TypeScript 💪
- TypeScript
v4.x
- Sequelize ORM
v6.x
- Nodemailer
- Handlebars for templating HTML
- Yup for validation schema
- JavaScript Style Airbnb Base
- Formating code using Prettier Integration Eslint and TypeScript Eslint
- Using Babel Resolver for simplify the require/import paths
- Documentation with Swagger
- Generate Log File with Winston
- Convensional Commit with Husky & Commitlint
clone this repo with https
/ ssh
/ github cli
git clone https://github.com/masb0ymas/expresso.git
After cloning this repo, make sure you have duplicated
the .env.example
file to .env
, don't let the .env.example file be deleted or renamed.
npm install
or
yarn
npx husky install
or
yarn husky install
npm run refresh:env-jwt
or
yarn refresh:env-jwt
npm run dev
or
yarn dev
npm run type-check
or
yarn type-check
npm run type-check:watch
or
yarn type-check:watch
Recommended using build with Babel
, build with TS
is still unstable
npm run build:babel
or
yarn build:babel
Using sequelize with development mode, you can set the database configuration in .env
, like this :
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=example_database
DB_USERNAME=example_user
DB_PASSWORD=example_password
DB_OPERATOR_ALIAS=
DB_TIMEZONE=+07:00
if you set production mode change the database config PROD_DB_DATABASE
then after that you can adjust the database config in DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
.
now you can run this command :
npm run db:reset
or
yarn db:reset
npm run serve:production
or
yarn serve:production
pm2 start ecosystem.config.js --env=production
npm install -g loadtest
Then run the app that you want to test with node app.js
. We’ll start by testing the version that doesn’t use clustering.
With the app running, open another Terminal and run the following load test:
loadtest http://localhost:8000/v1/user -n 1000 -c 100
-n
= network / requests
-c
= concurrency
--rps
= request per second
Read documentation loadtest
if you want to try 1000 requests
you have to increase RATE_LIMIT=1000
, by default 100 requests
Requests: 0 (0%), requests per second: 0, mean latency: 0 ms
Target URL: http://localhost:8000/v1/user
Max requests: 1000
Concurrency level: 100
Agent: none
Completed requests: 1000
Total errors: 0
Total time: 1.7057602980000002 s
Requests per second: 586
Mean latency: 162.8 ms
Percentage of the requests served within a certain time
50% 136 ms
90% 261 ms
95% 337 ms
99% 390 ms
100% 419 ms (longest request)
npm run test
or
yarn test
Adjust the config in .env like this:
...
PORT=7000 # change this port according to your needs
...
DB_CONNECTION=mysql
DB_HOST=db # access to service db in docker
DB_PORT=3306
DB_DATABASE=example
DB_USERNAME=your_username
DB_PASSWORD=your_password
DB_OPERATOR_ALIAS=
DB_TIMEZONE=+07:00
...
PROD_DB_CONNECTION=mysql
PROD_DB_HOST=db
PROD_DB_PORT=3306
PROD_DB_DATABASE=example
PROD_DB_USERNAME=your_username
PROD_DB_PASSWORD=your_password
PROD_DB_OPERATOR_ALIAS=
PROD_DB_TIMEZONE=+07:00
...
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=your_password
REDIS_PORT=6380 # Default: 6379
container_name
in each service is customizable.
PORT=...
If you want to use a port other than 7000
, you must also change the port in the services app
services:
app:
build:
context: .
container_name: express_app
depends_on:
- db
- redis
restart: always
ports:
- '7000:7000'
DB_HOST=..
. must be accessed using IPv4 Docker Network services db
.
db:
image: mariadb
container_name: express_db
volumes:
- ./storage/mariadb-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${PROD_DB_PASSWORD}
MYSQL_DATABASE: ${PROD_DB_DATABASE}
MYSQL_USER: ${PROD_DB_USERNAME}
MYSQL_PASSWORD: ${PROD_DB_PASSWORD}
restart: always
ports:
- '3307:3306'
networks:
- express_network
After all the above configuration is adjusted, you can run it with the command:
Command aggregates the output of each container
docker-compose up
Detached mode: Run containers in the background,
docker-compose up -d
if you want to release the app version, you can use the following command :
npm run release
or
yarn release
I use topol.io to create email templates, and it's free and can export to html format
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=465
MAIL_AUTH_TYPE=
[email protected]
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=
MAILGUN_API_KEY=your_api_key_mailgun
MAILGUN_DOMAIN=your_domain
MAIL_DRIVER=gmail
MAIL_HOST=
MAIL_PORT=
MAIL_AUTH_TYPE=OAuth2
[email protected]
MAIL_PASSWORD=
MAIL_ENCRYPTION=
OAUTH_CLIENT_ID=your_client_id
OAUTH_CLIENT_SECRET=your_client_secret
OAUTH_REDIRECT_URL=https://developers.google.com/oauthplayground
OAUTH_REFRESH_TOKEN=your_refresh_token
👤 masb0ymas
- Website: https://resume.masb0ymas.vercel.app
- Twitter: @masb0ymas
- Github: @masb0ymas
- LinkedIn: @masb0ymas
Give a ⭐️ if this project helped you!
This README was generated with ❤️ by readme-md-generator