Building RESTful APIs with Node.js, Express & MongoDB

  • 4.6/5
  • 933
  • Aug 20, 2024

In this article, we will explore how to build RESTful APIs using Node.js and Express. We'll utilize several standard libraries and tools:

Node.js: Node.js is a cross-platform, open-source JavaScript runtime environment. It runs on the V8 JavaScript engine and allows developers to execute JavaScript code outside of a web browser. Node.js is widely used for building command-line tools and server-side scripting.

Express.js: Express.js is a backend web application framework for Node.js, designed to build web applications and RESTful APIs. It is free, open-source software released under the MIT License.

Babel: Babel is a free and open-source JavaScript transcompiler. It converts ECMAScript 2015+ code into backward-compatible JavaScript code that can run on older JavaScript engines, enabling developers to use the latest language features.

MongoDB: MongoDB is a cross-platform, document-oriented NoSQL database program. It stores data in JSON-like documents with optional schemas, making it flexible for modern applications.

Postman: Postman is a popular tool for working with APIs. It provides an easy interface to make HTTP calls, test endpoints, and run scripts during various phases of API development.

Studio 3T: Studio 3T is a powerful and user-friendly GUI for MongoDB, offering advanced features to help manage and visualize MongoDB databases.

1) Project Setup

Here’s a step-by-step guide to creating, installing, and starting a Node.js and Express project:

1) Install Node.js & Express

Visit the official Node.js website. Download and run the installer for your operating system (e.g., macOS, Windows, Linux). The installer includes Node.js and npm (Node Package Manager).

Verify the installation by running the following commands in your terminal or command prompt:

node -v
# Example output: v20.16.0

Next, create your project directory:

cd ~/Desktop
mkdir nodejs-mongo-apis
cd nodejs-mongo-apis

Initialize a package.json file:

npm init

You can customize the generated package.json or use the default settings. Here's an example:

Install Express.js: Before installing Express.js, make sure Node.js and npm (Node Package Manager) are installed on your system. Use npm to install Express.js by running the following command:

npm i express

Now, you have initialized your project, installed Node.js (which comes with npm), and installed Express.

2) Install MongoDB

Go to the official MongoDB download page and choose the appropriate version for your OS (Windows, macOS, Linux).

If you're using macOS, you can install MongoDB Community Edition using Homebrew:

brew tap mongodb/brew
brew update
brew install mongodb-community@7.0
brew services start mongodb-community@7.0

Use the mongosh command to start the MongoDB shell:

mongosh

By default, mongosh connects to your local MongoDB server running on localhost at port 27017.

You can use Studio 3T to visualize and manage your MongoDB databases.

3) Install Mongoose

Mongoose is an object data modeling (ODM) library for MongoDB and Node.js. Install it using npm:

npm i mongoose

4) Install Babel

Babel is a JavaScript compiler that allows you to use the latest JavaScript features. Install Babel locally:

npm i --save-dev @babel/core @babel/cli @babel/node @babel/preset-env

5) Install Nodemon and Body-Parser

Nodemon is a utility that monitors for any changes in your source code and automatically restarts your server. Install Nodemon as a development dependency:

npm install --save-dev nodemon

Body-Parser is middleware for parsing incoming request bodies in a middleware before your handlers, available under the req.body property. Install Body-Parser as a dependency:

npm install body-parser

Here’s how your updated package.json should look:

6) Create Configuration for Babel

Create a .babelrc file (or babel.config.js) in the root directory of your project to configure Babel:

{ "presets": [ "@babel/preset-env" ] }

This configuration enables Babel to trans compile your modern JavaScript code into a version compatible with older JavaScript engines.

7) Change package.json File for Nodemon

Let's update our package.json file to include a new script for starting the server using Nodemon. This script will allow us to automatically restart the server whenever we make changes to our files.

Add the following line to the "scripts" section:

"scripts": { "start": "nodemon ./index.js --exec babel-node" }

Here's how your updated package.json should look:

8) Create index.js

Next, let's create a file called index.js. This file will serve as the entry point for our application:

9) Run the Server

You can now start the server using the npm start command. This will run the predefined command specified in the "start" property of the scripts object in package.json:

npm start

You should see the following output in your terminal:

Server is running on port: 3000

Node.js REST APIs CRUD

Here's a step-by-step guide to creating a Node.js REST API with CRUD (Create, Read, Update, Delete) operations:

1) Folder Structure

Create a src folder along with subfolders for models, routes, and services. Inside these folders, you'll create .js files as shown below:

2) Update index.js

Modify your index.js file to delegate routing responsibilities to appRoutes.js. The updated index.js should look like this:

3) Add Routes

Create CRUD routes for 'user' in the appRoutes.js file:

4) Test in Postman

Ensure your Node.js application is running and listening on a specific port. Then, you can test the CRUD APIs using Postman.

Node.js with MongoDB REST APIs CRUD

MongoDB is a NoSQL database that stores data in collections, where each collection contains documents resembling JSON objects. In our REST APIs, each 'user' will be represented by a document in MongoDB.

1) Add MongoDB Configurations

Update index.js to add a connection to MongoDB using Mongoose and set up body-parser middleware:

2) Create a Schema

Create a user.js file inside the models folder to represent the user schema:

3) Add CRUD Logic for Node.js + MongoDB

In the services folder, create an appService.js file and add the logic for CRUD operations using MongoDB:

4) Update Routes

Update appRoutes.js to call the functions from appService.js instead of returning static messages.

5) Test in Postman

Now, test your CRUD APIs with Postman to ensure everything is working correctly.

Source Code: GitHub

Index
Create and Run a React app and JSX Basics

14 min

How to Download AWS S3 Content Using AWS CLI on a Mac Machine

2 min

Load Testing using Locust.io (Open-source)

2 min

How to create a Multi-Module Project in Maven

2 min

Building RESTful APIs with Node.js, Express & MongoDB

14 min

Docker commands every developer should know

13 min

AWS S3 integration with Spring Boot (AWS S3 + Spring Boot)

14 min