ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
??
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 ¨C 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 ¨C
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,?{'Content?Type':?'text/plain'});
??res.end('Hello?Worldn');
}).listen(1337,?"127.0.0.1");
console.log('Server?running?at?http://127.0.0.1:1337/');
??
EventEmitter ¨C The powerhouse
of node
This should look familiar to most of you:
jQuery('.foo').click(function()?{
var?foo?=?this.attr('rel');
});
??
EventEmitter ¨C 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 ¨C 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 ¨C 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 ¨C Nodejs-powered
framework
npm install express
Robust routing
Redirection helpers
Dynamic view helpers
Application level view options
Content negotiation
Focus on high performance
View rendering and partials support
Environment based configuration
Session based flash notifications
??
ExpressJS - Example
Var?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 ¨C General Community
nodejs-dev ¨C Low level development
https://github.com/ry/node/wiki/modules
??
Thank You
Any Questions?

More Related Content

@techmeetup Edinburgh nodejs talk