a complete guide to node.js
Post on 10-May-2015
1.580 Views
Preview:
DESCRIPTION
TRANSCRIPT
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?
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
top related