Node.js Introduction

Node.js allows you to build scalable network
applications using JavaScript on the server-side. It uses V8 JavaScript Runtime. It’s written in C which makes it fast.

What could you build with Node.js?

  • Websocket Server (eg: chat server)
  • File Upload Client
  • Ad Server
  • Any Real-Time Data Apps

What is Node.js Not?

  • Not a Web Framework
  • It’s not Multi-threaded. It’s more of a single-threaded server.
  • A Web Framework

Hello Node!

Let’s start with a simple Hello server. First, tell the response which status it should have (a successful status is 200).
Next, write a message to the response body in the form of “Hello, this is “. To finish it up, tell the response to end so the client on the other side knows it’s received all the data.

var http = require('http');

http.createServer(function(request, response) {
  response.writeHead(200);
  response.write('Hello, this is Sean');
  response.end();
}).listen(8080);

Blocking Vs Non-Blocking Code

One of the biggest advantages of Node.js is the ability to use Non-blocking code. Let’s write some blocking code followed by it’s non-blocking version.

Blocking Code

var fs = require('fs');
var contents = fs.readFileSync('/etc/hosts');
console.log(contents);
console.log('Doing something else');

Here it stops the process until the read action is complete.

Non-Blocking Code

fs.readFile('/etc/hosts', function(err, contents) {
	console.log(contents);
});
console.log('Doing something else');

We can move our read action into a function:


var callback = function(err, contents) {
	console.log(contents);
}
fs.readFile('/etc/hosts', callback);

Running your Code

Install Node.js in your website.
Now go ahead and run that file we just created to read a file off the filesystem with node app.js

$ node app.js

Read File in Server

Now that you know how to create an HTTP server and how to read a file off the filesystem in a non-blocking way, let’s try to combine the two.
Instead of just writing a string to the HTTP response, use fs.readFile to write the contents of index.html to the response instead.
Note: since fs.readFile is non-blocking, make sure you end the response inside readFile’s callback.

var http = require('http');
var fs = require('fs');
http.createServer(function(request, response) {
  response.writeHead(200);
  fs.readFile('index.html', function(err, contens) {
    response.write(contens);
    response.end();
  });
}).listen(8080);

Issuing a Request

Let’s see our new server in action. We’ve already run node app.js, so in the terminal below use curl to issue a request to http://localhost:8080 and we’ll see our server respond with the contents of index.html

$ curl http://localhost:8080

Response WriteHead

Up until now all we’ve been sending into the writeHead function is the status code. However, it can take additional parameters. Let’s add ‘Content-Type’ of ‘text/html’ to the response.

var http = require('http');
var fs = require('fs');

http.createServer(function(request, response) {
  response.writeHead(200, {'Content-Type': 'text/html'} );

  fs.readFile('index.html', function(err, contents) {
    response.write(contents);
    response.end();
  });
  
}).listen(8080);

Response End

Our original Hello server can be shortened since the response.end() function optionally takes data as a parameter. Remove the ‘response.write’ line altogether, and send the hello string as a parameter on the response.end function. This will send the data, and once finished add the end to the response.

var http = require('http');

http.createServer(function(request, response) {
  response.writeHead(200);
  response.end("Hello, this is dog");
}).listen(8080);

The Event Loop

The event loop manages events by processing one at a time from the Event Queue.

Be first to comment

Leave a Reply