Express: Desenvolvimento web de alto nível e performance com node.js

Post on 19-May-2015

2.599 views 2 download

Tags:

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 of Express: Desenvolvimento web de alto nível e performance com node.js

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 Souza@franciscosouzawww.franciscosouza.com.br

http://www.flickr.com/photos/kimonomania/474758933/