Introduction to node.js GDD

Post on 06-May-2015

5.993 views 0 download

Tags:

description

Slides from my workshop about node.js which I conducted in Girl Geek Dinner Bangalore. More details at http://sudarmuthu.com/blog/introduction-to-node-js-at-yahoo-girl-geek-dinner

Transcript of Introduction to node.js GDD

Introduction to Node.js

Sudar Muthu (@sudarmuthu)

Research Engineer

Yahoo! Labs

http://github.com/sudar

http://sudarmuthu.com

Agenda

What Node.JS is not What is Node.JS Why Node.JS? Using Node.JS

› As a interactive shell› As a Server› As a Client

Common Modules Terminologies Workshop

Node.JS is not …

Ruby on Rails Django Codeigniter CakePHP

Node.JS is bare bone and the community are making stuff like Express, connect etc.

What is Node.JS JavaScript Programming Environment for creating highly

scalable network programs Provides Evented, non-blocking I/O Built on top of V8 engine Supports C/C++ based addons Supports CommonJS Module format Is fast .. in fact very fast. Similar to Event machine in Ruby or Twisted in Python

What is Evented I/O

Single thread Synchronous I/O

Single thread Synchronous I/O

Multi thread Synchronous I/O

Multi thread Synchronous I/O

You can throw in more servers, but that will cost you lot of money.

Synchronous I/O

Synchronous I/O

Synchronous I/O

Single thread Asynchronous I/O

Why Node.JS?

So, code like this

var result = db.query("select..");

// use result

either blocks the entire process or

implies multiple execution stacks (threads).

Why Node.JS?

But code like this

db.query("select..", function (result) {

// use result

});

allows the program to return to the event loop immediately. No more unnecessary threads.

Demo of Callback// execute the callback after 2 seconds

setTimeout(function () {

console.log("World!");

}, 2000);

// print in console

console.log("Hello");

https://github.com/sudar/node.js-samples/blob/master/callback.js

Using Node.JS Install Node.JS Install NPM Install other modules you want by doing

npm install <module_name>

You are good to go

(This setup is already done for you. Use the Ubuntu image in the pen drive)

Node.JS – as an interactive shellSimilar to Python’s shell

$> node

> 3 + 1

4

> true != false

true

>.help

>.exit

Node.JS – As a servervar http = require('http'); // require the http module

// create a server

http.createServer(function (req, res) {

// call this function when a request is received

res.writeHead(200, {

'Content-Type': 'text/plain'

});

// send this as part of the response

res.end('Hello World\n');

}).listen(1337, "127.0.0.1"); // listen on port 1337

// debug information

console.log('Server running at http://127.0.0.1:1337/');

https://github.com/sudar/node.js-samples/blob/master/http-server.js

Node.JS – As a clientvar http = require('http'); // require the needed modules

// make the request object

var request = http.request({

'host': 'sudarmuthu.com',

'port': 80,

'path': '/',

'method': 'GET'

});

// assign callbacks

request.on('response', function (response) {

console.log('Response Status Code: ' + response.statusCode);

response.on('data', function (data) {

console.log('Body: ' + data);

});

});

https://github.com/sudar/node.js-samples/blob/master/http-client.js

Core Modules

Processes Filesystem Networking Utilities

The entire list can be found at http://nodejs.org/api/

Core Modules - Processes

Node allows you to analyze your process and manage external process

Available Modules

process child_process

Code samples: https://github.com/sudar/node.js-samples/blob/master/process.js

Core Modules - Filesystem

Low level API to manipulate files

Available Modules

fs path

Code Samples: https://github.com/sudar/node.js-samples/blob/master/filesystem.js

Core Modules - NetworkingAvailable Modules

net dgram http tls https dns

Code Samples: https://github.com/sudar/node.js-samples/blob/master/dns.js

Core Modules - UtilitiesProvides utility methods

Available Modules

console util

Code Samples: https://github.com/sudar/node.js-samples/blob/master/console.js

Node.JS is useful for.. Writing highly concurrent server applications Sharing application logic between server and client Peer-to-peer web applications using websockets Real-time applications

Terminologies NPM – Package manager (like apt-get) Modules – Plugins or add-ons for Node.JS Express – MVC framework (like RoR) Jade – Template Engine (like Smarty) Socket.IO – A websockets Library

Links http://github.com/sudar/node.js-samples (all code samples

used in this talk) http://nodejs.org http://npmjs.org http://expressjs.com http://socket.io

Workshop

Express JS Basic web framework Runs on top of node.js Provides routing and redirection helpers Dynamic view helpers Has support for sessions Focus on high performance

Hello World Express App

https://github.com/sudar/node.js-samples/tree/master/express/hello-world

Square Things App Allows you to choose the color of a square region A very simple server implementation A very simple client MVC implementation Uses node.js on the server Uses Y.App implementation on the client

https://github.com/ericf/square-thing-app

Thank you