Download - @techmeetup Edinburgh nodejs talk
Tane Piper - @tanepiper
An Introduction To
http://nodejs.org
What Is Node?
nodejs (node) is a set of bindings to the V8 javascript VM. They allow developers to script
programs using asynchronous I/O in javascript.
Focused on performance and memory useage through an event loop – not threads.
Features of Node
Node is similar to Ruby's Event Machine Python's Twisted
Node takes the event model a bit further—it presents the event loop as a language construct instead of as a library.
Node simply enters the event loop after executing the input script. Node exits the event loop when there are no more callbacks to perform
Synchronous vs Asyncronous
$query="SELECT * FROM contacts";$result=mysql_query($query);
File file = new File("C:\\MyFile.txt");fis = new FileInputStream(file);fis.close();
What is the software doing?
x
http://www.flickr.com/photos/nationaalarchief/3675431410/
What is the software doing?
It's Waiting – Wasting cycles
Synchronous vs Asyncronous
db.query(”SELECT * FROM contacts”, function(err, rows) {rows.forEach(function(row) {
console.log(row);});
});
fs.readFile('techmeetup.txt', function(data) {console.log(data);
});
doSomethingElseWhileNotWaiting();
A HTTP Server in 4 lines
var http = require('http');
http.createServer(function (req, res) { res.writeHead(200, {'ContentType': 'text/plain'}); res.end('Hello World\n');}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
EventEmitter – The powerhouse of node
This should look familiar to most of you:
jQuery('.foo').click(function() {var foo = this.attr('rel');
});
EventEmitter – The powerhouse of node
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
emitter.on('name', function(data){ console.log(data + ' rocks');});
emitter.emit('name', 'nodejs');emitter.emit('name', 'techmeetup');
EventEmitter – A I/O Example
var spawn = require('child_process').spawn, ls = spawn('ls', ['lh', '/usr']);
ls.stdout.on('data', function (data) { console.log('stdout: ' + data);});
ls.stderr.on('data', function (data) { console.log('stderr: ' + data);});
ls.on('exit', function (code) { console.log('child proc exited with code ' + code);});
NPM – Node Package Manager
https://github.com/isaacs/npm
Used to install and publish your node programs.
JSON package format that It manages dependencies.
Integrates nicely with man pages
ExpressJS – Nodejs-powered framework
npm install express
Robust routingRedirection helpers
Dynamic view helpersApplication level view options
Content negotiationFocus on high performance
View rendering and partials supportEnvironment based configurationSession based flash notifications
ExpressJS - ExampleVar express = require('express');
var app = express.createServer();
app.get('/', function(req, res, next){ res.send('Hello World');});
app.post('/:name', function(req, res, next) {var name = req.params.name;
If (!name) { next(new Error('No name passed'); } else { res.send(['Hello', name].join(' ')); }});
app.listen(3000);
Something new: node-canvas
var Canvas = require('canvas') , canvas = new Canvas(200,200) , ctx = canvas.getContext('2d');var fs = require('fs') , out = fs.createWriteStream(__dirname + '/text.png') , stream = canvas.createPNGStream();
ctx.font = '30px Droid Sans';ctx.rotate(.1);ctx.fillText("Yay Techmeet Edinburgh!", 50, 100);
stream.on('data', function(chunk){ out.write(chunk);});
stream.on('end', function(){ console.log('saved png');});
Something new: node-canvas
nodejs Community
Google Groups:nodejs – General Community
nodejs-dev – Low level development
https://github.com/ry/node/wiki/modules
Thank You
Any Questions?