Node.js RESTful API Project with Express, MongoDB, and Postman

How to Build Node.js Restful API Project?

Today, I am sharing how to perform CRUD operations using Node Js, Express, Postman, and MongoDB. In my previous articles, I covered the Introduction of Nodejs, Set up the Node Environment, about the MongoDB Atlas. Here I share the Links and read the article.

  1. Node.js- Introduction, Features, Installation Guide, and Benefits.
  2. Set Up The Node Environment and Run a Simple Node Server Project.
  3. How to Create a MongoDB Atlas Account?

Let's start step by step.

1. How to Install the Node-js?

Step 1. Install the node-js. If you have already installed Node-js, skip this step. Here is the link: Download and install Node-js.

Install the Node.js

Picture 1. When you download the node-js, Check the recommended version and download it.

To verify the installation is correct, Enter the following command.

Node --version or Node -v

JavaScriptCopy

Check the npm version.

npm --version or npm -v

Picture 2. It is showing the installed version.

Step 2. Create a new folder for the project. I created a Node_Restful_API.

Step 3. Open the project folder directory in the vs-code.

Step 4. Open the terminal and open the current folder directory in the terminal.

2. How to Install NPM Package?

Install the npm package; open the terminal and type npm init -y, and enter; it will be installed.

NPM Package

Picture 3. npm init -y

3. Install the npm express, body-parser, nodemon, and mongoose.

Step 5. Express is a node js web application framework. We will install Express.

Here is the link: The Express framework.

npm install express or npm i express

NPM express

Picture 4. Installed express version 4.18.2.

Step 5. We will install body-parser, nodemon, and Mongoose. Here I link the npm pages to the heading.

  1. Body-parser. Node.js body parsing middleware.
  2. Nodemon. Node. Js-based applications by automatically restarting the node application.
  3. Mongoose. Mongoose is a MongoDB object modeling tool.

I installed three npm packages (body-parser, nodemon, and mongoose).

npm i nodemon body-parser mongoose

NPM Packages

Picture 5. You can see the dependencies here. I installed express, body-parser, nodemon, and Mongoose npm packages.

Step 6. Create a serve page serve.js.


const express = require("express");
const app = express();

app.get("/", function (req, res) {
  res.send("Hello C# Corner.");
});

app.listen(3000);

const express = require("express"); This line requires express from node_modules.

app.get("/", function (req, res) {
  res.send("Hello C# Corner.");
});

It has a callback function (req, res) req = it listens to the incoming request object, and res = responds accordingly using the response object.

Step 7. I execute the start script from package.json.

  "scripts": {
    "start": "nodemon server.js"
  },

JSON Package

Picture 6. Add the Scripts start nodemon server.js

Step 8. Open the terminal and run the node js “npm start”

Run Node.js

Picture 7

Step 9. Check the response body in Postman localhost port:3000.

Get Method

Picture 8. Here you can see this call get method, return “Hello C# Corner.” , Status: success (200 Ok)

4. How to get the MongoDB Connection String?

I installed the Mongoose npm package in our project and Go to the Mongo Atlas page, and got the connection string. I explained in my previous article, How to Create a MongoDB Atlas Account? There is the link. Read this; I continue from this article.

Step 10. Click on Connect button in the cluster in the dashboard.

Database Deployment

Picture 9

Connect to MongoDB

Picture 10. Click on the Drivers.

Step 11. Open the MongoDB Driver. Select your driver and version, and Add your connection string to your application code.

DB Cluster

Picture 11. 01. You will select your driver with the version. 02. You can copy the Connection string.

5. Connect the App with MongoDB

Step 12. Create a mongoose variable const mongoose =require('mongoose');

Connect to the Mongoose.

mongoose.
connect("mongodb+srv://<Username>:<Password>@mongodbcluster01.joofg8v.mongodb.net/<your_database_name>?retryWrites=true&w=majority")
  .then(() => {
    console.log("connected to MongoDB");
    app.listen(3000, () => {
      console.log(`Node API app is running on port 3000`);
    });
  })
  .catch((error) => {
    console.log(error);
  });

For the DB connection string, you will add your database name, and the connection will succeed app listens to port:3000.

MongoDB Database

Picture 12. you can see the connected db and success message “connected to MongoDB”.

6. Create a Model for Data in the Database.

Model for Data

Picture 13 I’m going to explain this diagram: Node apps have Models. On-site, the model has a schema; I’m Going to create a productModel.js file, With productSchema. Let’s we to the steps by step.

Step 13. Create a new folder as models.

Step 14. Create a productModel.js page. And Continue this code.

const mongoose = require("mongoose");

const productSchema = mongoose.Schema(
  {
    name: {
      type: String,
      required: [true, "Please enter a product name"],
    },
    quantity: {
      type: Number,
      required: true,
      default: 0,
    },
    price: {
      type: Number,
      required: true,
    },
    image: {
      type: String,
      required: false,
    },
  },
  {
    timestamps: true,
  }
);

const Product = mongoose.model("Product", productSchema);
module.exports = Product;

Include the mongoose in our code and is a require =const mongoose = require("mongoose");

Mongoose has a Schema. We can create a Schema from Mongoose productSchema is init const productSchema = mongoose.Schema()

Schema is the object. Inside the object, we create the field. In the field, the object has a data type.

const Product = mongoose.model("Product", productSchema);
module.exports = Product;

const Product = mongoose.model("Product", productSchema); This line creates a model. I’m going to create a model product from Mongoose, the first parameter model name, and the second parameter Schema name. The model will export.

module.exports = Product;

7. Use a Model to Save Data in MongoDB.

const express = require("express");
const mongoose = require("mongoose");
const Product = require("./models/productModel");
const app = express();
app.use(express.json());


app.post("/product", async (req, res) => {
  try {
    const product = await Product.create(req.body);
    res.status(200).json(product);
  } catch (error) {
    console.log(error.message);
    res.status(500).json({ message: error.message });
  }
});

Here we Import the product model const Product = require("./models/productModel");

Here add the express json middleware; the application understands json. app.use(express.json()); an application can accept json data type.

app.post("/product", async (req, res) => {
})

App. post from express, Call the route as a “ /product “.

 const product = await Product.create(req.body);
    res.status(200).json(product);

model. create(req.body) Product is Model, return status (200) success and product.

Now we can check the route in Postman.

Step 15. Go to the Postman and set the address http://localhost:3000/productset method in POST and Click on the Send button.

Save data

Picture 14. Successfully save the data in the database. Get status 200.

We can check whether the data was added or not in MongoDB.

Node Rest API

Picture 15. Node_RestfulAPI is a Database. “Products” is a collection. Now we can see the documents here.

8. Fetch or Get Data from the Database.

app.get("/products", async (req, res) => {
  try {
    const products = await Product.find({});
    res.status(200).json(products);
  } catch (error) {
    console.log(error.message);
    res.status(500).json({ message: error.message });
  }
});

Get the data(Documents) from dbconst products = await Product.find({}); This line get the data from the model.

Data from Model

Picture 16. Fetch or Get Data; you can see the product list here.

A. Get a single data from the database.

app.get("/products/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const product = await Product.findById(id);
    res.status(200).json(product);
  } catch (error) {
    console.log(error.message);
    res.status(500).json({ message: error.message });
  }
});

Get the product by the id of the product from the products collection.

app.get("/products/:id", async (req, res) => {
});

It’s a get method called “products/:id”. This line calls the id. It's the id of the products.

const { id } = req.params;

Get the id from url, deconstruct {id} from request params.

 const product = await Product.findById(id);

Get the single product from find by id (deconstruct -id).

Let's check the Postman's result.

Postmen Result

Picture 17: Get Data by product id. It’s a single data from the Database(products).

9. Update or Edit Data in the Database

app.put("/products/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const product = await Product.findByIdAndUpdate(id, req.body);
    // we cannot find any product in database
    if (!product) {
      return res
        .status(404)
        .json({ message: `cannot find any product with ID ${id}` });
    }
    const updatedProduct = await Product.findById(id);
    res.status(200).json(updatedProduct);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

Deconstruct the id, Product model use the find by id and update we pass the two parameters (id, request body).

const product = await Product.findByIdAndUpdate(id, req.body);

The product is found by id and updates the data from the request body(Edit data).

   if (!product) {
      return res
        .status(404)
        .json({ message: `cannot find any product with ID ${id}` });
}

Check the product after the update. Product is not there, return the error message with the status (404).

We will check the Postman. With the id: "_id": "64b7feef3001fa966450c413",

  {
        "_id": "64b7feef3001fa966450c413",
        "name": "Face powder",
        "quantity": 50,
        "price": 1500,
        "image": "https://static.javatpoint.com/list/images/list-of-cosmetic-products5.jpg",
        "createdAt": "2023-07-19T15:19:11.607Z",
        "updatedAt": "2023-07-19T15:19:11.607Z",
        "__v": 0
    },

Get data by product

Picture 18. Get Data by product id and Update the data. Now we can see the updated data here.

Update data

Picture 19. We can see the updated data here by "_id": "64b7feef3001fa966450c413",

10. Delete or Remove Data from the Database

// Delete a product
app.delete("/products/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const product = await Product.findByIdAndDelete(id);
    if (!product) {
      return res
        .status(404)
        .json({ message: `cannot find any product with ID ${id}` });
    }
    res.status(200).json(product);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

Get the id and delete it from the product Product.findByIdAndDelete(id);

Product finds by Id and removes the data from the database. We are removing "_id": "64b7ff633001fa966450c417", This id

{
    "_id": "64b7ff633001fa966450c417",
    "name": "Mascara",
    "quantity": 50,
    "price": 1000,
    "image": "https://static.javatpoint.com/list/images/list-of-cosmetic-products10.jpg",
    "createdAt": "2023-07-19T15:21:07.454Z",
    "updatedAt": "2023-07-19T15:21:07.454Z",
    "__v": 0
}

Remove data

Picture 20. Successfully removed Product by "_id": "64b7ff633001fa966450c417",

Summary

In my article, I explained how to perform CRUD operations using Node Js, Express, Postman, and MongoDB. In this article, I covered How to install the NODE, NPM, Express, Body-parser, Nodemon, and Mongoose. And also Connect the MongoDB with APP. Perform CRUD operations API checking with Postman. I hope this article helps those Who have an interest in self-learning. To Keep in touch with me, Next article i’m going to cover Understanding MVC pattern in Node Js


Similar Articles
Orfium Sri Lanka
Globally based Software Developing & Data Processing Company