stdout
of the Docker daemon).env
file inside the nodemon.json
file)Dockerfile
and docker-compose.yml
to fit your needspublic
folderLocally
Install dependencies:
npm install
or yarn
Start development server using Nodemon:
npm run dev
Keep in mind that Docker is not used here. Instead, the environment variable DATABASE_URI
gets accessed.
Docker(-Compose)
docker-compose up
Docker-Compose automatically creates a Node.js container using the Dockerfile
as well as a MongoDB container using the mongo:4.4.5-bionic
image.
Start the Node.js container only
docker build <project-dir> -t node-app
The NODE_ENV environment variable is set inside nodemon.json
for development
and in the Dockerfile
for production
. If you don't use Docker in production, you can set the NODE_ENV
variable in the ecosystem.config.json
file (PM2 config file) like so:
{
"apps": [
{
"name": "app",
"script": "index.js",
"instances": 1,
"autorestart": true,
"time": true,
"env_production": {
"NODE_ENV": "production"
}
}
]
}
SERVER_PORT=3000
DATABASE_URI=mongodb://127.0.0.1:27017/express-boilerplate
JWT_SECRET=your-secret
JWT_EXPIRATION_HOURS=24
JWT_ISSUER=Express Boilerplate
SMTP_HOST=mail-server
TP_PORT=587
SMTP_USERNAME=mail-server-username
SMTP_PASSWORD=mails-server-password
EMAIL_FROM=mail-sender
src\
|--config\ # Environment variables and configurations
|--controllers\ # Route controllers
|--middlewares\ # Middlwares
|--models\ # Mongoose models
|--routes\ # Routes
|--services\ # Business logic
|--types\ # Custom types
|--app.ts # Express app
|--index.ts # Entry point
Auth routes
POST /v1/auth/register
- body: { email: string, password: string }
POST /v1/auth/login
- body: { email: string, password: string }
GET /v1/auth/me
GET /v1/auth/logout
User routes
GET /v1/users
GET /v1/users/:id
POST /v1/users
- body: { email: string, password: string }
PUT /v1/users/:id
- body: { email: string, password: string }
DELETE /v1/users/:id
Right routes
GET /v1/rights
GET /v1/rights/:id
POST /v1/rights
- body: { name: string, description?: string }
PUT /v1/rights/:id
- body: { name: string, description?: string }
DELETE /v1/rights/:id
Role routes
GET /v1/roles
GET /v1/roles/:id
POST /v1/roles
- body: { name: string, description?: string, rights?: ObjectId[] }
PUT /v1/roles/:id
- body: { name: string, description?: string, rights?: ObjectId[] }
DELETE /v1/roles/:id