A complete guide to Node.js

Preview:

DESCRIPTION

A complete guide to start server side javascript programming called Node.js by Er. Prabin Silwal.

Citation preview

Complete Guide On Node.js

By: Senior DeveloperPrabin Silwal

What you should know before?

JavascriptUnix command

Installation:3way to install

• 1st way: Nodejs.org :– You can download pre-compiled binary– Easy installation– Automatic configured environment– But, updates require reinstallation– And switching versions need reinstallation

2nd way : Version manager(nvm):Install any version quicklySwitch version quicklyEasy install on LinuxBut no widzard based installation(must use

command line interface)And reinstall global modules when switching versionInstall version manager then node

3rd way : Compile it from source(node)Get absolute new nodeCustomize your installationBut you must be familiar with compiling processAnd takes longerAnd not easy to switch

Which is preferable?

• For mine 2nd way

Window installation:

• Download node.js• Click install

Checking after installation?

• Run command• Type “node” and hit enter• Type “console.log(‘your text’)”

Note that previous installation process needs re installation for new updates.

Installing using nvm in Linux(Not wizard mode for Linux):

Make ready to install by following command:

• sudo apt-get install git• sudo apt-get install curl

Install using command:

Why node.js ?

• It is js with browser• JS for both front end and backend (eg: using

jquery)• Native support• It’s fast because it’s mostly C code

What can you build?

• Websocket server ( Like chat server)• Fast file upload client• Ad server• Any Real- Time Data Apps

What is Node.js not:

• Web framework• For Beginners (it’s very low level)• Multi- threaded (You can think of it as a single

threaded server)

Few variables you are familiar about web browser:

• window : (Type in console of chrome)The window object have functions and attributes that have to do something with window being drawn in screen.

• location: (Type in console of chrome)The location object has all the information about url

that being loaded.

• document : (Type in console of chrome)The document object contains all oh html displayed

in page

Now type in node console:• It displays undefined message

Why not work in node?

• Because node is not just an instance , so “global” is defined in node but not in chrome console where you can get instance version of global object called window.

• This global object has several functions (which are not in chrome console)

• EG: require function: used to pull in different javascript script files from your appliction

But error in chrome console:

Some works on both:

• Eg: console

Note: local variable vs global

• Eg:name = prabin; //globalVar name = prabin; //local

Node is Non-blocking: Blocking vs No-blocking 1

Blocking vs No-blocking 2

Blocking vs No-blocking 3

Callback alternate syntax:

MODULES

REQUIRING MODULES

var http = require('http'); //http.jsva r fs = require('fs'); // fs.js

How does ‘require’ return the libraries?How does it find these files?

Custom Module Example:• Prabin_App(base folder)

– Example.jsvar say = require(‘./say_hello_module.js’); //say is assigned as object & has 2 properties : softly

and loudly which both are functionssay.softly(‘prabin’);Say.loudly(‘PRABIN’);

– Say_hello_module(Module Folder)• index.js var hello = function (message){

console.log(‘say hello:’+message);});exports.slowly = hello;//we first declare hello as function and setting slowly to be value of helloexports.loudly = function(message){

console.log(‘SAY HELLO:’+message);});

LETS CREATE OUR OWN MODULE

• For finding modules:

NPM: THE USERLAND SEA

“Core” is small. “Userland” is large.

Package manager for node• Comes with node• Module Repository• Dependency Management• Easily publish modules• “Local Only”

INSTALLING A NPM MODULE

/Home/my_app• $ npm install request https://github.com/mikeal/requestInstalls into local node_modules directory---------------after installation-------------------------------Home/my_app/node_modules/request

----For require/using in your app------------------------------------ /Home/my_app/app.jsva r request = require('request');//Loads from local

node_modules directory

LOCAL VS GLOBAL MODULE

• Install modules with executables globally:$ npm install coffee-script –g //global$ coffee app.coffee

Note: Global npm modules can’t be required

$ npm install coffee-script //Install locally

FINDING MODULES

• From npm command line: $ npm search module_nameEg: $ npm search request

DEFINING YOUR DEPENDENCIESmy_app/package.json{"name": "My App","version": "1","dependencies":

{"connect": "1.8.7"

}}

Then: $ npm install will installs it into the node_modules directoryi.e. my_app/node_modules/connect

• SEMANTIC VERSIONING:Major Minor Patch 1 . 8 . 7

Test Time

NODE.JS : Hello world

Hello.jsvar http = require('http');http.createServer(function(request, response) {response.writeHead(200); //Status code in browserresponse.write("Hello World.");//ResponseTextresponse.end();//Close the connection}).listen(8080);//Listen for connection on this portconsole.log('Listening on port 8080...');

• Run the server:$ node Hello.js(Listening on port 8080...)

• View output$ curl http://localhost:8080(Hello World)

Event Loops 1

Event Loops 2

Long Running Process

var http = require('http');http.createServer(function(request, response) {

response.writeHead(200);response.write(“Hello World running.");response.end();setTimeout(function() //Represent long running process{

response.write(" Hello World is done.");response.end();

}, 5000); //5000ms = 5 seconds}).listen(8080);

TWO CALLBACKS HERE

var http = require('http');http.createServer(function(request, response) {

response.writeHead(200);response.write(“Hello World running.");response.end();setTimeout(function() //Represent long running process{

response.write(" Hello World is done.");response.end();

}, 5000); //5000ms = 5 seconds}).listen(8080);

request

timeout

TWO CALLBACKS TIMELINE

(With blocking timeline)

NOTE: TYPICAL BLOCKING THINGS

• Calls out to web services• Reads/Writes on the Database• Calls to extensions

EVENTS IN THE DOM

• The DOM triggers Events you can listen for those events

EVENTS IN NODE 1

• Many objects in Node emit events

EVENTS IN NODE 2

Also there is custom EventEmitter

var EventEmitter = require('events').EventEmitter;

var http = require('http');

http.createServer(function(request, response){ ... });

But what is really going on here?http://nodejs.org/api/

Breaking It downvar http = require('http');

ALTERNATE SYNTAX

Streams

STREAMING RESPONSE

http.createServer(function(request, response) {response.writeHead(200);response.write(“Hello World Writing.");

setTimeout(function() {

response.write(" Hello World is done.");response.end();

}, 5000);}).listen(8080);

Readable stream Writable stream

Output to client: Hello World Writing. (5 seconds later) Hello World is done.

HOW TO READ FROM THE REQUEST?

$ curl -d 'hello' http://localhost:8080Output on client: hello

READING AND WRITING A FILE

var fs = require('fs'); // require filesystem modulevar file = fs.createReadStream("readme.md");var newFile =

fs.createWriteStream("readme_copy.md");require filesystem modulefile.pipe(newFile);

UPLOAD A FILEvar fs = require('fs');var http = require('http');http.createServer(function(request, response) {var newFile =

fs.createWriteStream("readme_copy.md"); request.on('end', function() { response.end('uploaded!');});

}).listen(8080);On Client:$ curl --upload-file readme.md http://localhost:8080Output on client: uploaded!

DOCUMENTATION http://nodejs.org/api/

REMEMBER THIS CODE 1?

var fs = require('fs');var newFile = fs.createWriteStream("readme_copy.md");var http = require('http');http.createServer(function(request, response) {

request.pipe(newFile);request.on('end', function() {

response.end('uploaded!');});

}).listen(8080);

REMEMBER THIS CODE 2?http.createServer(function(request, response) {var newFile = fs.createWriteStream("readme_copy.md");var fileBytes = request.headers['content-length'];var uploadedBytes = 0;request.pipe(newFile);request.on('data', function(chunk) {

uploadedBytes += chunk.length;var progress = (uploadedBytes / fileBytes) * 100;response.write("progress: " + parseInt(progress, 10) + "%\n");

});

}).listen(8080);

Express

Express

SOCKET.IO

SOCKET.IO

• Traditional

Persisting Data

Persisting Data

References:

• IN T R O T O N O D E . J S (Authorized site)• Ihrig C. J. - Pro Node.js for Developers• Gackenheimer C. - Node.js Recipes

Thank You

• Any Suggestions and queries :Website: http://prabinsilwal.com.npEmail: silwalprabin@hotmail.com

Recommended