Giter Club home page Giter Club logo

express-node-starter's Introduction

REST API Developed with Node.js, Express, MongoDB, Multer and nodemailer Boilerplate

Author GitHub license Downloads

Overview

This project provides a robust API skeleton written in JavaScript ES6, suitable for any project. It offers features such as authentication, authorization, JWT tokens, role management, CRUD operations, email notifications, and more. Additionally, it automates the generation of CRUD (Create, Read, Update, Delete) operations for entities within a MongoDB database, streamlining the development process for Node.js applications built on top of Express.js.

Table of Contents

Getting started

This is a basic API skeleton written in JavaScript ES6.

This project will run on NodeJs using MongoDB as database.

API Documentation [Swagger]

Features

  • Authentication and Authorization
  • JWT Tokens, make requests with a token after login with Authorization header with value Bearer yourToken where yourToken will be returned in the Login response.
  • Role Manage
  • Update Profile/Password User Account
  • Upload Image with multer
  • Reset Password Mail using nodemailer
  • Pre-defined response structures with proper status codes.
  • Included CORS.
  • System notification with Firebase
  • Email Template and settings
  • Validations added.
  • Included API collection for Postman.
  • Light-weight project.
  • Linting with Eslint. (Airbnb style)
  • Included CLI for generating CRUD operations.
  • husky for pre-commit hooks and lint-staged for running linters on git staged files.

Software Requirements

  • Node.js 16+
  • MongoDB 4+

Engines

  • node >=14.16.0 <=20.11.0
  • npm >=6.14.11 <=10.2.4

How to install

Using Git (recommended)

  1. Clone the project from github.
git clone https://github.com/fadhlaouir/express-node-starter.git

Using manual download ZIP

  1. Download repository
  2. Uncompress to your desired directory

Install npm dependencies after installing (Git or manual download)

cd express-node-starter
npm install

Setting up environments

  1. You will find a file named .env.example on root directory of project.
  2. Create a new file by copying and pasting the file and then renaming it to just .env
    cp .env.example .env
  3. The file .env is already ignored, so you never commit your credentials.
  4. Change the values of the file to your environment. Helpful comments added to .env.example file to understand the constants.

Project structure

.
├── .husky
│   ├── _
│   │   ├── .gitignore
│   │   └── husky.sh
│   ├── pre-commit
│   └── pre-push
├── cli
│   ├── _
│   │   ├── deleteCrud.js
│   │   ├── generateEmptyCrud.js
│   │   ├── generateMinimalCrud.js
│   │   └── helpers.js
│   ├── index.js
│   └── README.md
├── src
│   ├── controllers
│   │   ├── auth.controller.js
│   │   └── user.controller.js
│   ├── middlewares
│   │   ├── multer.js
│   │   └── verify-token.js
│   ├── models
│   │   └── user.model.js
│   ├── routes
│   │   ├── auth.route.js
│   │   └── user.route.js
│   ├── template
│   │   └── userAccountEmailTemplates.js
│   ├── utils
│   │   └── helpers.js
│   └── swagger.json
├── .commitlintrc.json
├── .editorconfig
├── .env
├── .env.example
├── .eslintignore.json
├── .eslintrc.json
├── .gitignore
├── .prettierignore.json
├── .prettierrc.json
├── CHANGELOG.md
├── LICENSE
├── package.json
├── README.md
└── server.js

How to run

Running API server locally

If you would like to run the API server on your local environment, you can do so by running the following command: Windows OS

npm run develop

Linux OS or Mac OS

npm run develop:mac
Connected to the database:YOUR_DB_CONNECTION_STRING
App is running ...

Press CTRL + C to stop the process.

Note:

YOUR_DEVELOPMENT_DB_CONNECTION_STRING will be your MongoDB connection string for development environment.

YOUR_PRODUCTION_DB_CONNECTION_STRING will be your MongoDB connection string for production environment.

Creating new models

If you need to add more models to the project just create a new file in src/models/ and use them in the controllers.

Creating new routes

If you need to add more routes to the project just create a new file in src/routes/ and import it in src/app to be loaded.

Creating new controllers

If you need to add more controllers to the project just create a new file in src/controllers/ and use them in the routes.

Using the CLI to generate CRUD operations

  1. Navigate to the project directory.
  2. Run the following command:
npm run crud:operation

See the CLI README section for more details on how to use the CLI to generate or delete CRUD operations.

Follow the prompts to select the CRUD type (empty or minimal) and provide the entity name. The tool will generate the necessary files for the CRUD operations based on your selection.

Linting and Formatting

Running Eslint

npm run lint:check

Fixing Eslint errors

npm run lint:fix

Prettier for code formatting

npm run format:fix

You can set custom rules for eslint in .eslintrc.json file, Added at project root.

Bugs or improvements

Every project needs improvements, Feel free to report any bugs or improvements. Pull requests are always welcome.

License

This project is open-sourced software licensed under the MIT License. See the LICENSE file for more information.

Credits

Sponsor on Buy Me a Coffee

If you find this project valuable, consider supporting us through Buy Me a Coffee. Your sponsorship helps us maintain and improve the project, ensuring better features, updates, and support for the community.

Buy Me A Coffee

express-node-starter's People

Contributors

fadhlaouir avatar

Stargazers

Rafael Passos avatar Dania Ben Ali avatar  avatar Fatma Layouni avatar Nermine Ouada avatar Mahdi Selmani avatar Wael Hajji avatar Mouhamed Salah avatar  avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.