An API Boilerplate to create a ready-to-use REST API in seconds with NestJS 10.x and JWT Auth System π»
pnpm install
cp .env.example .env
To set up on multiple environments, such as dev, stage or prod, we do as follows:
cp .env.example .env.dev # or .env.stage, etc
Config settings .env for sending a notification when a user registers, forgets password or changes password
EMAIL_HOST=smtp.mailtrap.io
EMAIL_PORT=2525
EMAIL_AUTH_USER=[:user]
EMAIL_AUTH_PASSWORD=[:password]
EMAIL_DEBUG=true
EMAIL_LOGGER=true
Once the database has been configured, start the Nest App via pnpm run start:dev
it automatically synchronizes the entities so it is ready to use. π»
TYPEORM_CONNECTION = "mysql"
TYPEORM_HOST = "localhost"
TYPEORM_PORT = 3306
TYPEORM_USERNAME = [:user]
TYPEORM_PASSWORD = [:password]
TYPEORM_DATABASE = [:database]
TYPEORM_AUTO_SCHEMA_SYNC = true
TYPEORM_ENTITIES = "dist/**/*.entity.js"
TYPEORM_SUBSCRIBERS = "dist/subscriber/**/*.js"
TYPEORM_MIGRATIONS = "dist/migrations/**/*.js"
TYPEORM_ENTITIES_DIR = "src/entity"
TYPEORM_MIGRATIONS_DIR = "src/migration"
TYPEORM_SUBSCRIBERS_DIR = "src/subscriber"
pnpm install -g ts-node
ts-node node_modules/.bin/typeorm migration:run -d dist/typeorm-cli.config
or
node_modules/.bin/typeorm migration:run -d dist/typeorm-cli.config
# development
$ pnpm start
# watch mode
$ pnpm start:dev
# production mode
$ pnpm start:prod
pnpm start --entryFile repl
or
pnpm start:repl
There is a docker-compose.yml
file for starting MySQL with Docker.
$ docker-compose up db
After running, you can stop the Docker container with
$ docker-compose down
http://127.0.0.1:3000/docs
or
http://127.0.0.1:3000/docs-json
or
http://127.0.0.1:3000/docs-yaml
Configure SWAGGER_USER
and SWAGGER_PASSWORD
in the .env file and set NODE_ENV
to local
or dev
or staging
to access the SWAGGER(Open API) documentation with basic authentication.
NODE_ENV=[:enviroments]
SWAGGER_USER=[:user]
SWAGGER_PASSWORD=[:password]
If you want to add more environments, include them in the SWAGGER_ENVS
array in main.ts
, see the following:
const SWAGGER_ENVS = ['local', 'dev', 'staging'];
Configuring the SERVER_PORT environment variable as the default port if you don't want to use the default
SERVER_PORT=3333
ENDPOINT_URL_CORS='http://127.0.0.1:4200'
curl -H 'content-type: application/json' -v -X GET http://127.0.0.1:3000/api/secure -H 'Authorization: Bearer [:token]'
curl -H 'content-type: application/json' -v -X POST -d '{"email": "[email protected]", "password": "mysecret"}' http://127.0.0.1:3000/api/auth/login
curl -H 'content-type: application/json' -v -X POST -d '{"name": "tony", "email": "[email protected]", "username":"tony_admin", "password": "mysecret"}' http://127.0.0.1:3000/api/auth/register
curl -H 'content-type: application/json' -v -X POST -d '{"refreshToken": "[:token]"}' http://127.0.0.1:3000/api/auth/refresh-tokens
curl -H 'content-type: application/json' -v -X POST -d '{"email": "[email protected]"}' http://127.0.0.1:3000/api/auth/forgot-password
curl -H 'content-type: application/json' -v -X POST -d '{"email": "[email protected]", "password": "new_password"}' http://127.0.0.1:3000/api/auth/change-password -H 'Authorization: Bearer [:token]'
curl -H 'content-type: application/json' -v -X PUT -d '{"name": "tony", "email": "[email protected]", "username": "tony_admin"}' http://127.0.0.1:3000/api/users/:id/profile -H 'Authorization: Bearer [:token]'
curl -H 'content-type: application/json' -H 'Accept: application/json' -v -X GET http://127.0.0.1:3000/api/users -H 'Authorization: Bearer [:token]'
curl -H 'content-type: application/json' -H 'Accept: application/json' -v -X GET http://127.0.0.1:3000/api/users/:id -H 'Authorization: Bearer [:token]'
curl -H 'content-type: application/json' -v -X PUT -d '{"name": "tony", "email": "[email protected]", "username": "tony_admin", "password":"password_update"}' http://127.0.0.1:3000/api/users/:id -H 'Authorization: Bearer [:token]'
curl -H 'content-type: application/json' -H 'Accept: application/json' -v -X DELETE http://127.0.0.1:3000/api/users/:id -H 'Authorization: Bearer [:token]'