How to build a microservice with NodeJs, Express and MongoDB

Rushikesh Mhetre
May 12 · 6 min read

Most of us have gone through tough times where you have a large scale application which has a bunch of features, API integrations, database connections, etc. New features and updates get released, and of course you need to fix the bugs and maintain the code.

Building this real-world application requires dynamic programming, where the size of the application grows uncontrollably.

This monolith pattern becomes very hard to downsize or simplify the application. So to run the app smoothly, it is essential to convert the large, homogeneous structure into small, independent pieces of programs. Similar complexities can be resolved effortlessly when the NodeJs applications are build on microservices, more so with the Node.js ecosystem.

So I am going to show you how to build the microservices…

This blog is only for an overview of how to build the services, please visit https://github.com/Nomercy10/ecommerce-micro-services for a full functional working microservices demo.

In our example we will be building two microservices, Users & Orders. The idea is very simple, users will place an order. We create the order with all the required details, and so on.

Here is the list of the features each of these microservice will have

  • GET all users
  • GET user
  • Create new user
  • DEL user by userId
  • GET all orders
  • GET order
  • GET orders for a user
  • Create new order for a user
  • DEL an order
  • DEL orders for an user

Tech

  • Node.js : evented I/O for the backend
  • Express : Fast node.js network app framework
  • MongoDb : A NoSql database for modern applications

As we build these microservices we will create separate folders for each microservice. Each folder will have its own package.json and node modules installed.

Let’s get started…

Installation

Create Users folder and install below dependencies

Users installed dependencies

Info about the dependencies

  • body-parser: It is a Node.js body parsing middleware, it parses incoming request bodies in a middleware before your handlers and is available under req.body property.
  • axios: A promise based HTTP client for browser and Node Js.
  • nodemon: A tool used for Node Js development as it provides hot-reloading for any file change.
  • mongoose: A MongoDB Object modelling tool designed to work in an asynchronous environment.

Development

Create Users.jsin the /Users folder, this file will be our entry point to Users microservice.

Load the dependencies

Load dependencies

Install the MongoDB Node.js Driver

The MongoDB Node.js Driver allows you to easily interact with MongoDB databases from within Node.js applications. You’ll need the driver in order to connect to your database and execute the queries described in this Quick Start series.

If you don’t have the MongoDB Node.js Driver installed, you can install it with the following command.

Create a free MongoDB Atlas cluster and load the sample data

Next, you’ll need a MongoDB database. The easiest way to get started with MongoDB is to use Atlas, MongoDB’s fully-managed database-as-a-service.

Head over to Atlas and create a new cluster in the free tier. At a high level, a cluster is a set of nodes where copies of your database will be stored. Once your tier is created, load the sample data.

Get your cluster’s connection info

The final step is to prep your cluster for connection.

In Atlas, navigate to your cluster and click CONNECT. The Cluster Connection Wizard will appear.

The Wizard will prompt you to add your current IP address to the IP Access List and create a MongoDB user if you haven’t already done so. Be sure to note the username and password you use for the new MongoDB user as you’ll need them in a later step.

Next, the Wizard will prompt you to choose a connection method. Select Connect Your Application. When the Wizard prompts you to select your driver version, select Node.js and 3.6 or later. Copy the provided connection string as you will use in the following section.

For more details on how to access the Connection Wizard and complete the steps described above, see the official documentation.

Connect to your database from a Node.js application

Now that everything is set up, it’s time to code! Let’s write a Node.js script that connects to your database and lists the databases in your cluster.

Import mongoose client

The mongoose client will be used to connect to a MongoDB database. This is an instance of MongoDb to connect to a cluster, access the database in that cluster, and close the connection to that cluster.

The first thing after this we need to do is create a constant for our connection URI. The connection URI is the connection string you copied in Atlas in the previous section. When you paste the string don’t forget to update <username> and <password> to be the credentials for the user you created in the previous section. The connection string includes a <dbname> placeholder.

Note: The username and password you provide in the connection string are NOT the same as your Atlas credentials.

Connection string URI

Now that we have the URI, we can create an instance of the MongoDB

inItialization of MongoDB client and loading the global instance

Database Models

Now that we have our connection setup, let’s go ahead and create MongoDB data models. We will be using mongoose.model
Models are fancy constructors compiled from Schema definitions. An instance of a model is called a document. Models are responsible for creating and reading documents from the underlying MongoDB database.

APIs

For the sake of this blog not becoming too long to read I am going to show only two APIs. You may create the others I referenced or as many features you want.

GET all orders for a user API

As you can see above, when we trigger “/users/:uid/” orders we are making an external API call to Orders microservice and a call the GET API for “/orders?uid= ”. This way we have communicated between the microservices and have shared data.

Create new user API

In the above example, we are creating a new user. First we create a newUser object with the response from the request body.
We then create a new “User” instance, a MongoDB data model User instance & pass the “newUser” to it.

We can now use .save() property to save the data to MongoDB. As its a promise based property we can use .then and perform the operation we want to.

Note: Note: I am not showing here how to create the microservice for Orders as it is pretty straightforward and similar to what we have done for Users microservice. If you still need to see how to implement that, please visit my github repo link mentioned above at the start of the blog.

PS: This is my first technical blog, please leave comments if you feel I should add something I am missing or a clap if you like it.

Thankyou!

Happy Coding!

Nerd For Tech

From Confusion to Clarification

Nerd For Tech

NFT is an Educational Media House. Our mission is to bring the invaluable knowledge and experiences of experts from all over the world to the novice. To know more about us, visit https://www.nerdfortech.org/. Don’t forget to check out Ask-NFT, a mentorship ecosystem we’ve started

Rushikesh Mhetre

Written by

Product Developer | Full Stack Developer . I work on VueJs, NodeJs, GCP and AWS cloud services. Comfortable in most of the frontend frameworks. Learning GoLang

Nerd For Tech

NFT is an Educational Media House. Our mission is to bring the invaluable knowledge and experiences of experts from all over the world to the novice. To know more about us, visit https://www.nerdfortech.org/. Don’t forget to check out Ask-NFT, a mentorship ecosystem we’ve started

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store