express: desenvolvimento web de alto nível e performance com node.js
DESCRIPTION
Apresentação feita no Giran Siege (http://blog.giran.com.br/2010/09/giran-siege-palestras-internas-da-giran/), no dia 28/10/2010.TRANSCRIPT
ExpressDesenvolvimento web de alto nível e
performance com node.js
Francisco Souza@franciscosouza
www.giran.com.brwww.franciscosouza.com.brfrancisco@franciscosouza.net
Antes de tudo...
var http = require('http');
http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n');}).listen(8124, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8124/');
Sinatra
Sinatra
require 'sinatra'get '/' do "Hello World\n"end
Express
http://www.flickr.com/photos/benchilada/2467374335/
Mais um framework?
Aliás...
Mais uma tecnologia?
Mais uma tecnologia?
JavaScript server side?!
http://lamumar.files.wordpress.com/2010/06/scared-monkey.png
Assíncrono
var express = require('express');var app = express.createServer();
app.get('/', function (request, response) { response.send('Hello world!'); });
app.listen(3000);
var express = require('express');var app = express.createServer();
app.get('/', function (request, response) { response.send('Hello world!'); });
app.listen(3000);
http://www.flickr.com/photos/ramdac/373881476/
Fácil de instalar
$ npm install express
http://inblogs.com.br/media/blogs/news/susan_boyle_01.jpg
http://1.bp.blogspot.com/_LMyAb-qFdMo/ScF7LC89nXI/AAAAAAAAAL8/uR2i_RZB7c4/s320/cabeamento_estruturado_redes_08.jpg
Configuração intuitiva
app.configure(function(){ app.use(express.methodOverride()); app.use(express.bodyDecoder()); app.use(app.router); app.use(express.staticProvider(__dirname + '/public'));});
Múltiplos ambientes?
Múltiplos ambientes?
app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));});
Múltiplos ambientes?
app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));});
app.configure('production', function(){ app.use(express.errorHandler());});
http://www.flickr.com/photos/aurelian/3526863186/
Roteamento descomplicado
app.get('/pessoas/1', callback);
app.get('/pessoas/1', callback);
app.post('/pessoas', callback);
app.put('/pessoas/1', callback);
app.del('/pessoas/1', callback);
RESTful!
<input type="hidden" name="_method" value="put" />
http://www.flickr.com/photos/josephrobertson/4429285449/
<input type="hidden" name="_method" value="delete" />
http://www.desenhosanimadosclube.com/imagens/desenhosanimadosclube.com/produtos/H%20-%20Desenhos/Homem_Elastico2.jpg
Extensível
Express é “só” controller...
http://www.baixaki.com.br/imagens/materias/372014371.jpg
tinyurl.com/nodemodules
http://www.flickr.com/photos/patrickgage/3738107746/
biblio.js
app.get('/books', function (request, response) { var options = { locals: { books : ['Java for girls', 'Lord of the Rings'] } }
jade.renderFile(__dirname + '/templates/list.jade', options, function (err, html) { if (err) { throw err; }; response.send(html); });});
Assíncrono! :)
app.get('/books', function (request, response) { var options = { locals: { books : ['Java for girls', 'Lord of the Rings'] } }
jade.renderFile(__dirname + '/templates/list.jade', options, function (err, html) { if (err) { throw err; }; response.send(html); });});
Assíncrono! :)
!!! 5html(lang="en") head title Books body h1 Books list #container ul - each book in books li #{book}
http://www.noupe.com/wp-content/uploads/2009/11/why.jpg
http://www.deadline.com/wp-content/uploads/2010/08/justin-bieber-my-world-2.jpg
Francisco [email protected]
http://www.flickr.com/photos/kimonomania/474758933/