create-myexpress-api v1.0.1
Express REST API Boilerplate
A CLI to automatically clone express-rest-api-boilerplate
Author
Installation
Install the CLI globally OR use npx:
npm install -g create-myexpress-api
Usage
# with global install
create-myexpress-api name-of-your-app
# with npx
npx create-myexpress-api name-of-your-app
This will create a directory with the given name, clone the express API boilerplate repo into it, and install dependencies.
Features
- ✔ Authentication Routes
- ✔ Register
- ✔ Login
- ✔ Logout
- ✔ Refresh Token
- ✔ MongoDB Config Setup
- ✔ Multer config setup for file upload at server
✔ CRUD Product Routes
- ✔ Unprotected
✔ JWT Protected
# Create,Delete,Update(protected) role : admin # Get Single or all Products(unprotected) role: Customer
Environment Variables
To run this project, you will need to add the following environment variables to your .env file
API_PORT
DEBUG_MODE
DB_URL
JWT_SECRET
REFRESH_SECRET
IMAGE_DATABASE_DOMAIN_URL
API Reference
Authentication Routes
Register new user
POST /api/register
Request Body
Parameter | Type | Description |
---|---|---|
name | string | Required. Name of User |
email | string | Required. Email of User |
password | string | Required. Password for user |
repeat_password | string | Required. Confirm password |
role | string | Not Required. Default:Customer To be able to Create,Update,Delete Products set this to 'admin' |
Login user (returns access token validity 1 minute)
POST /api/login
Request Body
Parameter | Type | Description |
---|---|---|
email | string | Required. Email of User |
password | string | Required. Password for user |
**200 ok Response**
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGM1ZWRkNTVkZTMwYjM2OTA3YjQwMjkiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE2MjQxMDc3MzUsImV4cCI6MTYyNDEwNzc5NX0.qpFlryiMUmbwPbxRjTDMkCZVLYL-yDi2it8vAF9hueU",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGM1ZWRkNTVkZTMwYjM2OTA3YjQwMjkiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE2MjQxMDc3MzUsImV4cCI6MTYyNDE5NDEzNX0.QXlXOppYhH1WyccN__wXdBYp71x8SIGrSL7gAgvyV3o"
}
Get user info
GET /api/whoami
Headers
Parameter | Type | Description |
---|---|---|
Authorization Bearer | string | Required. Access Token |
**Use access token for making whoami,logout,refresh & CRUD requests**
Get refresh token(1 day validity)
POST /api/refresh
Request Body
Parameter | Type | Description |
---|---|---|
refresh_token | string | Required. Refresh Token |
**Use access token for making whoami,logout,refresh & CRUD requests**
Logout user
POST /api/logout
Request Body
Parameter | Type | Description |
---|---|---|
refresh_token | string | Required. Refresh Token |
Headers
Parameter | Type | Description |
---|---|---|
Authorization Bearer | string | Required. Access Token |
**Use access token for making whoami,logout,refresh & CRUD requests**
CRUD Protected(JWT) & Unprotected Routes
Get all products
GET /api/products
Request Body
Parameter | Type | Description |
---|---|---|
NA | NA | Not Applicable |
Get single product
GET /api/products/${id}
Request Body
Parameter | Type | Description |
---|---|---|
id | string | Required. Id of product to fetch |
Create new product
POST /api/products/${id}
Request Body
Parameter | Type | Description |
---|---|---|
name | string | Required. Name of product |
price | int | Required. Price of product |
quantity | int | Required. Quantity of product |
image | file | Required. Image of product |
Headers
Parameter | Type | Description |
---|---|---|
Authorization Bearer | string | Required. Access Token |
Update existing product
PUT /api/products/${id}
Request Body
Parameter | Type | Description |
---|---|---|
id | string | Required. Id of product to be updated |
name | string | Required. Name of product |
price | int | Required. Price of product |
quantity | int | Required. Quantity of product |
image | file | Not Required. Image of product |
Headers
Parameter | Type | Description |
---|---|---|
Authorization Bearer | string | Required. Access Token |
Delete existing product
DELETE /api/products/${id}
Request Body
Parameter | Type | Description |
---|---|---|
id | string | Required. Id of product to be deleted |
Headers
Parameter | Type | Description |
---|---|---|
Authorization Bearer | string | Required. Access Token |
Appendix
API folder structure
-express_rest_starter_kit
*api
*config
-index.js
*controllers
-index.js
-productController.js
*auth
-registerController.js
-loginController.js
-refreshController.js
-whoamiController.js
*middlewares
-admin.js
-auth.js
-errorHandler.js
*models
-index.js
-user.js
-product.js
-refreshToken.js
*routes
-index.js
*services
- CustomErrorHandler.js
- JWTService.js
*uploads
- 3748374834-3293829.jpg
*validators
-productValidation.js
-server.js
REST EXPRESS API Boilerplate Structure Information (WHAT IS WHAT ?)
**server.js the entry file to start your api**
**config has (.env variables) exported via index.js**
**controllers has all the routes logic which is exported via a common index.js**
**middlewares contain auth.js (checking authorization header in request header) and errorHandler that act as general error handler for the entire api.**
**models has the DB Schemas exported by a single file named index.js**
**routes has all the routes path along with controller reference that is exported via common index.js which is then imported in the server.js**
**services includes Class based modules like CustomErrorHandler for handling d/f error cases and JWTService for signing JWT token**
**uploads folder contain all the image uploaded via the Create New Product Route**
**validators contains Client Side Validation modules**