2

I'm trying to run a basic node.js file on an aws server running ubuntu 14.04 and apache 2.4.7

var http = require('http');

var hostname = '33.33.33.33';
var port = 3000;

var server = http.createServer(function(req, res) {
    console.log(req.headers);

    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>Hello World</h1>');
});

server.listen(port, hostname, function() {
    console.log('Server running at http://${hostname}:${port}/');
});

The hostname is just the IP to the server. Should it be something else? Should the hostname be the IP or should it be something else?

The above code gives the following error:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRNOTAVAIL
    at errnoException (net.js:901:11)
    at Server._listen2 (net.js:1020:19)
    at listen (net.js:1061:10)
    at net.js:1135:9
    at dns.js:72:18
    at process._tickCallback (node.js:415:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:901:3

********Update*********

I have updated my code with localhost. That got rid of the error and allowed me to run the .js file. However I can't access the file from the server. I type in the IP like so

**.**.**.**:3000

This returns the message:

This site can’t be reached

**.**.**.** refused to connect.
ERR_CONNECTION_REFUSED

I also try accessing the location the file is located on the server but I get the same result.

**.**.**.**:3000/nodelearning/c1_node_week1/node-express

After I run:

node myNodeApp.js

In the terminal, I just need to access the IP of the server from a web browser right? Do I need to access only the root **.**.**.**:3000 or do I need to access the specific location of the node file **.**.**.**:3000/learningNode/myNodeApp.js

I only need to access the root right?

So **.**.**.**:3000 should work?

Below is the .js file that I'm able to run. But I can't access.

var express = require('express'),
    http = require('http');

var hostname = 'localhost';
var port = 3000;

var app = express();

app.use(function (req,res, next) {
    console.log(req.headers);

    res.writeHead(200, {'Content-Type': 'text/html' });
    res.end('<html><body><h1>Hello World</h1></body></html>');
});

var server = http.createServer(app);


server.listen(port, hostname, function(){
    console.log('Server running at http:// NVM');
});

Cheers

1
  • did you found any solution on this?? Commented Dec 28, 2018 at 6:07

1 Answer 1

4

the issue is with

var hostname = '33.33.33.33';

because when routes are recycled new ip address are assigned to the machine. so this will fail. As a recomendation skip host parameter in listen() or if you still want to use hostname use

var hostname = '127.0.0.1';

or

var hostname = 'localhost';

hope it helps :)

Sign up to request clarification or add additional context in comments.

3 Comments

I'll give that a shot. I think I tried 'localhost' already. If I leave out the host parameter it works. However when I try using the express module it won't work at all. Does the express module require the host? I'll update my answer with code in a few hours when I get access to my laptop. Thanks for the help.
express module does not require host
Thanks, I've updated my question. What you told me was the solution as it got rid of the error, but I still can't view the output or the hello world. Any advice?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.