Your SlideShare is downloading. ×
Introduction to Node.js: What, why and how?
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Introduction to Node.js: What, why and how?


Published on

Talk given at NodeMTL #1

Talk given at NodeMTL #1

Published in: Technology

  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Introduction to Node.js: What, why and how? Christian Joudrey - @cjoudrey
  • 2. “Nodes goal is to provide an easy way to buildscalable network programs.”
  • 3. What is node?• Command line tool to run JavaScript: $ node my_app.js• Built on top of Googles V8 JavaScript engine• Provides a JavaScript API for network and file system• Event-based, non-blocking I/O APIs
  • 4. my_app.js: setTimeout(function () { console.log(world); }, 2000); console.log(hello);Running it: $ node my_app.js hello world
  • 5. The cost of I/O?• Accessing RAM ~ 250 CPU cycles• Disk operations ~ 41 000 000 CPU cycles o Reading a file o Writing to a file• Network I/O ~ 240 000 000 CPU cycles o Database query responses o Http responses o Memcache results
  • 6. • I/O is expensive• Most web applications are I/O bound, not CPU bound
  • 7. Handling I/O• Apache is multithreaded (depending on conf.) o Spawns a thread per request (or process)• Each request is in its own "box", blocking I/O is "okay".result = query(SELECT * FROM ...);print;
  • 8. Thread-per-connection is expensive
  • 9. • nginx uses an event-loop, like node.
  • 10. Enter node...• Single thread for your code• ...but, I/O runs in parallel• Handle thousands of concurrent connections with a single process• Need to be very careful with CPU-intensive code
  • 11. I/O in node• No function should directly perform I/O.• To receive info from disk, network, or another process there must be a callback.• Callbacks are typically in the format: function (err, result) { }query(SELECT * FROM ..., function (err, result){ if (!err) { print; }});
  • 12. CommonJS Module Systemmymodule.js:module.exports.add = function (a, b) { return a + b;};Using the module:var mymodule = require(mymodule);console.log(mymodule.add(5, 2));
  • 13. Built-in Modules• File System require(fs);• HTTP Client and Server require(http);• TCP Sockets require(net);• Many more:
  • 14. Getting Started• Node.js:• Build instructions: Mac: brew update && brew install node• npm, a package manager for Node: curl | sh• Many modules at:• Windows support isnt great (for the moment)
  • 15. Reading a JSON File var fs = require(fs); var file = __dirname + /test.json; fs.readFile(file, utf8, function (err, data) { if (err) { console.log(Error: + err); return; } data = JSON.parse(data); console.dir(data); });
  • 16. Simple HTTP Server var http = require(http); var s = http.createServer(function (req, res) { var headers = {Content-Type: text/html}; req.writeHead(200, headers); res.end(<h1>hello world</h1>); }); s.listen(8080,;
  • 17. Express makes HTTP easier• Nodes HTTP module is low level.• Express is a simple framework inspired by Sinatra (Ruby).• Installing Express: npm install express && npm install jade• Robust verb-based routing o app.get(/about, function(req, res) { }); o, function(req, res) { });• Templating (with Jade or EJS)• Sessions
  • 18. Getting Started with Express• Generate skeleton apps: express –help• Generate app with sessions and template engine: express --sessions --template jade hello/• Generated structure: $ ls hello/ app.js logs pids public test views $ ls hello/views/ index.jade layout.jade
  • 19. Useful Modules• Express - Sinatra-like Web Framework npm install express• Jade - HAML-like Template Engine npm install jade• Socket.IO - Cross-browser WebSocket library npm install
  • 20. Interesting Links• Lots of Express examples:• Express Documentation:• Source Code:• Database wrappers and ORMs: o Mongoose (MongoDB, ORM-like): o Couch-ar (CouchDB, Active Record implementation):
  • 21. Questions? :)