Node JS

Build a Full-Stack Node.js MongoDB CRUD App with JWT Authentication

In this tutorial, we will teach the process of building a full-stack application using Node.js, MongoDB, and JWT authentication. This Application will allow users to perform CRUD operations (Create, Read, Update, Delete) on a MongoDB database, while also implementing user authentication using JSON Web Tokens (JWT) Step by Step.I have attached the complete Video Below. Follow the Instruction and do the project.

Nodejs express

Install Node JS

npm init

Then open the project in to the VS Code Editor by typing the following command

code .

after open up the project in to the vscode editor
Install the Express Server as back end server

npm i express

Install the bodyParser

npm i body-parser

Install the mongoDB as database

npm i mongoose

Install the bcrypt

npm i bcrypt

Install the jsonwebtoken

npm i jsonwebtoken

Create Server and Establish the Database Connection

First Create the Application index.js which manage the ports and libraries and database connection of the project. We have created the database on mongodb atlas Cloud database service which name dbsmss.attached the db connection below.

const mongoose = require("mongoose")
var routers = require('./routes/routes');
const bodyParser = require("body-parser")

const app = express()
const cors = require('cors');
const port = 5000;

const mongodatabaseURL ="mongodb://127.0.0.1:27017/dbsmss";

mongoose.connect(mongodatabaseURL,{
    useNewUrlParser: true,
    useUnifiedTopology: true
});

const connection = mongoose.connection


app.listen(port,()=>{
    console.log("Server is running port" +port);
})


connection.once("open",()=>{
    console.log("MongoDb Connected!!!......")
});

app.use(cors());
app.use(bodyParser.json());
app.use(routers);

After that you can run the server type by the following command.using following command

node index.js

After that Create the Folder Routes inside the Route folder create Route file

router.js

const express = require("express")
const router = express.Router();
var studentModel = require('../src/student/studentModel');
const Student = require("../src/student/studentModel");
const auth = require("../middleware/auth");

router.post("/students/login", async (req,res)=>{
    try{
        const student = await Student.findByCredentials(req.body.name,req.body.password)

        const token = await student.generateAuthToken()

        res.send({student,token})

      
    }
    catch(error)
    {
        res.status(401).send()
    }
})


//Add Rrcords
router.post('/student/create', async (req, res) => {
    try {
      const student = new studentModel(req.body);
      await student.validate(); // Validate the input data
  
      await student.save();
      res.status(201).send({
        status: true,
        message: "Student Created!!!!!!!!!!!!!!!!"
      });
    } catch (error) {
      res.status(400).send(error);
    }
  });



//View Records
router.get('/students',auth, async(req,res)=>{
   
   try{

        const students = await studentModel.find({});
        res.send(students);
   }
   catch(error)
   {
        res.status(400).send(error);
   }

});


//find records

router.get('/students/me',auth, async(req,res)=>{
   
    try{
         const _id = req.student._id;
         const students = await studentModel.findById({_id});

        if(!students)
        {
            return res.status(404).send();
        }  
        return res.status(200).send(students); 
    }
    catch(error)
    {
         res.status(400).send(error);
 
    }

 });









//update records
 router.patch('/students/:id',auth, async(req,res)=>{
   
    try{
        const _id = req.params.id;
        const body = req.body;
        const updatestudents = await studentModel.findByIdAndUpdate(_id,body,{new:true});

        if(!updatestudents)
        {
            return res.status(404).send();
        }  
     
        res.status(201).send(
            {
                "status" : true,
                "message" : "Student updateddd!!!!!!!!!!!!!!!!"
            });
 
    }
    catch(error)
    {
         res.status(400).send(error);
 
    }

 
 });


//delete records
 router.delete('/students/:id', async(req,res)=>{
   
    try{
            const _id = req.params.id;
        
         const deletestudents = await studentModel.findByIdAndDelete(_id);

        if(!deletestudents)
        {
            return res.status(404).send();
        }  
       
        res.status(201).send(
            {
                "status" : true,
                "message" : "Student Deletedd!!!!!!!!!!!!!!!!"
            });
    }
    catch(error)
    {
         res.status(400).send(error);
 
    }
 });



 router.post('/students/logout',auth, async(req,res)=>{
   
    try{
            req.student.tokens = req.student.tokens.filter((token)=>{
                return token.token !== req.token;
            })

            await req.student.save()
            res.send()
    }
    catch(error)
    {
         res.status(400).send(error);
 
    }
 });
module.exports = router;

Create Model

StudentModel.js

const mongoose = require("mongoose")
const bcrypt = require( 'bcrypt' );
const jwt = require("jsonwebtoken")


var Schema  = mongoose.Schema;
var studentSchema = new Schema(
    {
        name: {
            type:String,
            required: true
        },
        address: {
            type:String,
            required: true
        },
        phone: {
            type:Number,
            required: true
        },
        password:{
            type: String,
            trim: true,
            required : true
        },
        tokens:[
            {
                token:{
                    type:String,
                }
            }
        ]
    }
)


studentSchema.pre("save", async function (next) {
    const student = this;
    if (student.isModified("password")) {
      student.password = await bcrypt.hash(student.password, 8);
    }
    next();
  });

  studentSchema.statics.findByCredentials = async (name,password)=>{
    const student = await Student.findOne({name})
   
           
        const isMatch = await bcrypt.compare(password,student.password)
            if(!isMatch)
            {
                throw new Error()
            }
            return student
  }

  studentSchema.methods.generateAuthToken = async function(){
    const student = this;
    const token = jwt.sign({_id: student._id.toString()},"mysecret")
    student.tokens = student.tokens.concat({token})
    await student.save()
    return token;
}


const Student = mongoose.model('student',studentSchema);
module.exports = Student


Auth

create the folder middleware inside the folder implement the auth

const jwt = require("jsonwebtoken")
const Student = require("../src/student/studentModel")
const auth = async(req,res,next)=>{
    try
    {
      const token =   req.header("Authorization").replace("Bearer ","")
      const decoded =  jwt.verify(token,"john2")
      const student = await Student.findOne(
      {
        _id:decoded._id,
        "tokens.token":token
      })
      if(!student){
        throw new Error()
      }
      req.student = student;
      next()
    }
    catch(error)
    {
        res.status(401).send({error: "Please Auth"})
    }
}

module.exports = auth

i have attached the video link below. which will do this tutorials step by step.

 

admin

Share
Published by
admin

Recent Posts

Laravel 11 CRUD Mastering RESTful API MVC with Repository Pattern

In this tutorial will teach Laravel 11 Api MVC with Repository Pattern Crud Application step…

1 month ago

Laravel 11 CRUD Application

In this tutorial will teach Laravel 11 CRUD Application step by step. Laravel  11 CRUD…

2 months ago

How to make Times Table in React

in this tutorials we will be talk about how to make a times table in…

2 months ago

Laravel Tutorial: How to Add Numbers Easily Laravel 10

In this tutorials will teach How to add two numbers in Laravel 10. (more…)

2 months ago

Hospital Management System using OOP Java and MySQL

In this tutorial, we will explin you through the process of building a Hospital Management…

4 months ago

Mastering JavaScript OOP Inheritance

Inheritance in JavaScript using classes. You have a Person class as the superclass, an Employee…

4 months ago