Node.js, Express & MongoDb: Build a CRUD Rest Api example
Node.js MongoDB Rest CRUD API overview
We will build Rest Apis that can create, retrieve, update, delete and find Tutorials by title.
First, we start with an Express web server. Next, we add configuration for MongoDB database, create Tutorial model with Mongoose, write the controller. Then we define routes for handling all CRUD operations (including custom finder).
The following table shows overview of the Rest APIs that will be exported:
Methods
Urls
Actions
GET
api/tutorials
get all Tutorials
GET
api/tutorials/:id
get Tutorial by id
POST
api/tutorials
add new Tutorial
PUT
api/tutorials/:id
update Tutorial by id
DELETE
api/tutorials/:id
remove Tutorial by id
DELETE
api/tutorials
remove all Tutorials
GET
api/tutorials/published
find all published Tutorials
GET
api/tutorials?title=[kw]
find all Tutorials which title contains 'kw'
Finally, we’re gonna test the Rest Apis using Postman.
This is our project structure:

Create Node.js App
First, we create a folder:
Next, we initialize the Node.js App with a package.json file:
We need to install necessary modules: express, mongoose, body-parser and cors.
Run the command:
The package.json file should look like this:
Setup Express web server
In the root folder, let’s create a new server.js file:
What we do are:
– import express, body-parser and cors modules:
Express is for building the Rest apis
body-parser helps to parse the request and create the
req.bodyobjectcors provides Express middleware to enable CORS with various options.
– create an Express app, then add body-parser and cors middlewares using app.use() method. Notice that we set origin: http://localhost:8081.
– define a GET route which is simple for test.
– listen on port 8080 for incoming requests.
Now let’s run the app with command: node server.js.
Open your browser with url http://localhost:8080/, you will see:

Yeah, the first step is done. We’re gonna work with Mongoose in the next section.
Configure MongoDB database & Mongoose
In the app folder, we create a separate config folder for configuration with db.config.js file like this:
Define Mongoose
We’re gonna define Mongoose model (tutorial.model.js) also in app/models folder in the next step.
Now create app/models/index.js with the following code:
Don’t forget to call connect() method in server.js:
Define the Mongoose Model
In models folder, create tutorial.model.js file like this:
This Mongoose Model represents tutorials collection in MongoDB database. These fields will be generated automatically for each Tutorial document: _id, title, description, published, createdAt, updatedAt, __v.
If you use this app with a front-end that needs id field instead of _id, you have to override toJSON method that map default object to a custom object. So the Mongoose model could be modified as following code:
And the result will look like this-
After finishing the steps above, we don’t need to write CRUD functions, Mongoose Model supports all of them:
create a new Tutorial: object.save()
find a Tutorial by id: findById(id)
retrieve all Tutorials: find()
update a Tutorial by id: findByIdAndUpdate(id, data)
remove a Tutorial: findByIdAndRemove(id)
remove all Tutorials: deleteMany()
find all Tutorials by title: find({ title: { $regex: new RegExp(title), $options: “i” } })
These functions will be used in our Controller.
Create the Controller
Inside app/controllers folder, let’s create tutorial.controller.js with these CRUD functions:
create
findAll
findOne
update
delete
deleteAll
findAllPublished
Let’s implement these functions.
Create a new object
Create and Save a new Tutorial:
Retrieve objects (with condition)
Retrieve all Tutorials/ find by title from the database:
We use req.query.title to get query string from the Request and consider it as condition for findAll() method.
Retrieve a single object
Find a single Tutorial with an id:
Update an object
Update a Tutorial identified by the id in the request:
Delete an object
Delete a Tutorial with the specified id:
Delete all objects
Delete all Tutorials from the database:
Find all objects by condition
Find all Tutorials with published = true:
Define Routes
When a client sends request for an endpoint using HTTP request (GET, POST, PUT, DELETE), we need to determine how the server will reponse by setting up the routes.
These are our routes:
/api/tutorials: GET, POST, DELETE/api/tutorials/:id: GET, PUT, DELETE/api/tutorials/published: GET
Create a turorial.routes.js inside app/routes folder with content like this:
You can see that we use a controller from /controllers/tutorial.controller.js.
We also need to include routes in server.js (right before app.listen()):
Test the APIs
Run our Node.js application with command: node server.js.
Using Postman, we’re gonna test all the Apis above.
Create a new Tutorial using
POST /tutorialsApi
After creating some new Tutorials, you can check MongoDb collection:

Retrieve a single Tutorial by id using
GET /tutorials/:idApi
Update a Tutorial using
PUT /tutorials/:idApi
Check
tutorialscollection after some documents were updated:
Find all Tutorials which title contains ‘js’:
GET /tutorials?title=js
Find all published Tutorials using
GET /tutorials/publishedApi
Delete a Tutorial using
DELETE /tutorials/:idApi
The Tutorial was removed from
tutorialscollection:
Delete all Tutorials using
DELETE /tutorialsApi
Last updated
Was this helpful?