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.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
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? :)