tivoni
tivoni

Reputation: 2020

nodemon + express, listen port =?

I create a simple node project using express:

npm install -g express-generator
express test
cd test/ && npm install
PORT=3000 npm start

So this gets the test app up and running on port 3000. Great. Now I'd like to use nodemon to run this project. I've installed it:

npm install -g nodemon

In the gihub README it is run the same way as node. This is a bit confusing, because the new way of starting node is npm start not node. So I tried:

$ PORT=3000 nodemon ./app.js 
13 May 23:41:16 - [nodemon] v1.0.18
13 May 23:41:16 - [nodemon] to restart at any time, enter `rs`
13 May 23:41:16 - [nodemon] watching: *.*
13 May 23:41:16 - [nodemon] starting `node ./app.js`
13 May 23:41:16 - [nodemon] clean exit - waiting for changes before restart

But when I try to connect, there's nothing there. I confirmed that with:

lsof -i TCP:3000

Which returned nothing. Normally (with npm start) it returns:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    18746 user   10u  IPv4 433546      0t0  TCP *:3000 (LISTEN)

Can anyone tell whats wrong here? How is it possible to get the app to listen on the specified port with nodemon?

my setup:

npm -v
1.3.21
node -v
v0.10.24
nodemon -v
v1.0.18
express -V
4.2.0

Upvotes: 57

Views: 63024

Answers (6)

gondolas
gondolas

Reputation: 21

In Express 4.21.0 you can specify the port that express app listens into the first parameter of method "listen".

e.g. for port 2024

const app = express();  
const server = http.createServer(app);

server.listen.(2024)

Upvotes: 0

toshi
toshi

Reputation: 2814

If you are looking for the way to specify the port number with nodemon + express-generator, go to bin/www and change the line

var port = normalizePort(process.env.PORT || '3000');

to specific number. For example,

var port = normalizePort(process.env.PORT || '1234');

Upvotes: 0

Dũng IT
Dũng IT

Reputation: 2999

you too use define your for nodemon:

$ nodemon --inspect ./bin/www 3000

Upvotes: 4

Tiago Gouvêa
Tiago Gouvêa

Reputation: 16740

Additionally, some times, the port are just in use. If the other solutions not work for you, try change the port. It may be in use for some other node instance.

Upvotes: -2

Neo
Neo

Reputation: 4760

in package.json

  "scripts":{
    // "start": "node ./bin/www"
    "start": "nodemon ./bin/www"
   }

the following would now be equivalent:

$ npm start
$ nodemon ./bin/www

Upvotes: 103

swanson_ron
swanson_ron

Reputation: 183

This also works: Include this in your app.js (it does the same thing as the neolivz4ever said)

app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + server.address().port);
});

Upvotes: 14

Related Questions