Setup Nodemon to auto restart Nodejs application server

Published on Sep 10, 2017

3 min read

NODEJS

Manually restarting Node.js application is a tiring and tedious job. Nodemon is the best solution available to autorestart a nodejs app server in development mode.

Step 1

🔗

Organize the source directory src and initiate it with an app.js or index.js or server.js or any other convention you use to bootstrap a Node.js server.

Update the package.json file accordingly by adding a start script.

1{
2 "name": "nodemon-auto-restart",
3 "version": "1.0.0",
4 "description": "",
5 "main": "index.js",
6 "scripts": {
7 "start": "node src/index.js"
8 },
9 "keywords": [],
10 "author": "Aman Mittal <amandeepmittal@live.com> (http://amandeepmittal.github.io/)",
11 "license": "MIT"
12}

Step 2

🔗

Add express or any other framework as dependency to bootstrap a minimal server.

Code for a minimal server:

1'use strict';
2
3const express = require('express');
4const app = express();
5
6app.use('/', (req, res) => {
7 res.status(200).send('Hello World!');
8});
9
10app.listen(3000);

In first terminal window start the server:

$ npm run start
> node src/index.js

In second terminal window, request the url to test if the api is working and to see the response message:

$ curl -X GET http://localhost:3000/
Hello World!

Now if I change the response message, I have to restart the server to get the desired result:

1app.use('/', (req, res) => {
2 res.status(200).send('Lorem Ipsum');
3});

Use Ctrl + C to stop the currently running server and restart it by using the same command before: npm run start.

Using the curl command again from terminal window we get the desired result:

curl -X GET http://localhost:3000/
Lorem Ipsum

This whole process is repetitive will slow your development of any package or application. Better solution is to use nodemon.

Step 3

🔗

Add nodemon as devDependency:

$ npm i -D nodemon
1{
2 "name": "nodemon-auto-restart",
3 "version": "1.0.0",
4 "description": "",
5 "main": "index.js",
6 "scripts": {
7 "start": "node src/index.js"
8 },
9 "keywords": [],
10 "author": "Aman Mittal <amandeepmittal@live.com> (http://amandeepmittal.github.io/)",
11 "license": "MIT",
12 "dependencies": {
13 "express": "4.15.3"
14 },
15 "devDependencies": {
16 "nodemon": "1.11.0"
17 }
18}

Step 4

🔗

Make another script dev under npm scripts in package.json file:

1{
2 "scripts": {
3 "start": "node src/index.js",
4 "dev": "nodemon --watch src src/index.js"
5 }
6}

Now run $ npm run dev and request using curl command, we will see the last familiar result:

curl -X GET http://localhost:3000/
Lorem Ipsum

If I change the response message in index.js file back to Hello World, this time I don't I have to restart the server since nodemon is watching for the changes using inside the src directory, through its --watchparameter. If I use the curl command again, the result is familiar with the update:

curl -X GET http://localhost:3000/
Hello World

One can verify by observing the log messages in the terminal window where nodemon is running:

$ npm run dev
> nodemon-auto-restart@1.0.0 dev /Users/amandeepmittal/github/nodemon-auto-restart
> nodemon --watch src src/index.js
[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: /Users/amandeepmittal/github/nodemon-auto-restart/src/**/*
[nodemon] starting `node src/index.js`
[nodemon] restarting due to changes...
[nodemon] starting `node src/index.js`

To stop the nodemon process, use Ctrl + C.

Full Source at this Github Repository.

Originally Published at Hackernoon.com


More Posts

Browse all posts

Aman Mittal author

I'm a software developer and a technical writer. In this blog, I write about Technical writing, Node.js, React Native and Expo.

Currently, working at Expo. Previously, I've worked as a Developer Advocate, and Senior Content Developer with companies like Draftbit, Vercel and Crowdbotics.


Copyright ©  2019-2022 Aman Mittal · All Rights Reserved.