Node.js sta crescendo rapidamente; uno dei motivi principali per questo è grazie agli sviluppatori che creano strumenti straordinari che migliorano significativamente la produttività con Node. In questo articolo, passeremo attraverso l'installazione di base di Express, un framework di sviluppo e la creazione di un progetto di base con esso.
Il nodo è simile nel design e influenzato da sistemi come Ruby's Event Machine o Python's Twisted. Il nodo prende un po 'più avanti il modello di eventi - presenta il ciclo degli eventi come un costrutto linguistico invece che come una libreria.
In questo tutorial, analizzeremo la home page di YouTube, otterremo tutte le miniature di dimensioni normali dalla pagina così come i link e la durata del video, invieremo tutti quegli elementi a un modello jQueryMobile e riprodurli utilizzando l'embed di YouTube (che fa un bel lavoro di rilevamento del supporto multimediale del dispositivo (flash / html5-video).
Impareremo anche come iniziare a usare npm e Esprimere, il processo di installazione del modulo di npm, il routing Express di base e l'uso di due moduli di nodo: richiesta
e jsdom
.
Per quelli di voi che non hanno ancora familiarità con Node.js e come installarlo, fare riferimento alla home page node.js
e la pagina del progetto GitHub npm.
Dovresti anche fare riferimento alla nostra serie "Node.js: Step by Step".
Nota: Questo tutorial richiede e presuppone che tu capisca cos'è Node.js e che tu abbia già installato node.js e npm.
Quindi cos'è esattamente Express? Secondo i suoi sviluppatori, è un ...
Insanely veloce (e piccolo) framework di sviluppo web JavaScript lato server costruito su Node e Connect.
Sembra fantastico, vero? Usiamo npm per installare express. Aprire una finestra di Terminale e digitare il seguente comando:
npm install express -g
Passando -g
come parametro del comando install, stiamo dicendo a npm di fare un'installazione globale del modulo.
sto usando / home / node-server / Nettuts
per questo esempio, ma puoi usare qualunque cosa ti senti a tuo agio.
Dopo aver creato il nostro progetto express, dobbiamo isntruct npm per installare le dipendenze Express.
cd nodetube npm installazione -d
Se finisce con "ok", allora sei a posto. Ora puoi eseguire il tuo progetto:
nodo app.js
Nel tuo browser, vai a http: // localhost: 3000
.
Un'implementazione JavaScript del DOM W3C.
Torna al tuo terminale e, dopo aver fermato il tuo attuale server (ctr + c), installa jsdom
:
npm installa jsdom
Metodo di richiesta HTTP semplificato.
Digitare quanto segue nel terminale:
richiesta di installazione di npm
Tutto dovrebbe essere configurato ora. Ora è il momento di inserire un codice reale!
Innanzitutto, includiamo tutte le nostre dipendenze. Apri i tuoi app.js
file, e, nelle prime righe, aggiungere il seguente codice:
/ ** * Dipendenze del modulo. * / var express = require ('express'), jsdom = require ('jsdom'), request = require ('request'), url = require ('url'), app = module.exports = express.createServer () ;
Noterai che Express ha creato un codice per noi. Quello che vedi app.js
è la struttura più basilare per un server Node usando Express. Nel nostro precedente blocco di codice, abbiamo detto a Express di includere i nostri moduli installati di recente: jsdom
e richiesta
. Inoltre, includiamo il modulo URL, che ci aiuterà a analizzare l'URL del video che recupereremo da YouTube in seguito.
Entro app.js
, cerca la sezione "Rotte" (intorno alla riga 40) e aggiungi il seguente codice (leggi i commenti per capire cosa sta succedendo):
app.get ('/ nodetube', function (req, res) // Indica alla richiesta che vogliamo recuperare youtube.com, inviare i risultati a una richiesta di funzione callback (uri: 'http://youtube.com ', funzione (err, response, body) var self = this; self.items = new Array (); // Mi sento come se volessi salvare i miei risultati in un array // Solo un errore di base controllare se (err && response.statusCode! == 200) console.log ('Request error.'); // Invia il parametro body come codice HTML che analizzeremo in jsdom // indica anche a jsdom di allegare jQuery negli script e caricato da jQuery.com jsdom.env (html: body, scripts: ['http://code.jquery.com/jquery-1.6.min.js'], function (err, window) // Usa solo jQuery come in una normale pagina HTML var $ = window.jQuery; console.log ($ ('title'). text ()); res.end ($ ('title'). text ()););) ;);
In questo caso, stiamo recuperando i contenuti dalla home page di YouTube. Una volta completato, stiamo stampando il testo contenuto nel tag del titolo della pagina (
nodo app.js
Nel tuo browser, vai a: http: // localhost: 3000 / nodetube
Dovresti vedere, "YouTube - Broadcast Yourself", che è il titolo di YouTube.
Ora che abbiamo tutto pronto e funzionante, è tempo di ottenere alcuni URL video. Vai alla home page di YouTube e fai clic con il pulsante destro del mouse su una miniatura nella sezione "video consigliati". Se hai installato Firebug, (che è altamente raccomandato) dovresti vedere qualcosa di simile al seguente:
C'è un modello che possiamo identificare e che è presente in quasi tutti gli altri collegamenti video regolari:
div.vide-entry span.clip
Concentriamoci su questi elementi. Torna al tuo editore, e in app.js
, aggiungi il seguente codice al / nodetube
itinerario:
app.get ('/ nodetube', function (req, res) // Indica alla richiesta che vogliamo recuperare youtube.com, inviare i risultati a una richiesta di funzione callback (uri: 'http://youtube.com ', funzione (err, response, body) var self = this; self.items = new Array (); // Mi sento come se volessi salvare i miei risultati in un array // Solo un errore di base controllare se (err && response.statusCode! == 200) console.log ('Request error.'); // Invia il parametro body come codice HTML che analizzeremo in jsdom // indica anche a jsdom di allegare jQuery negli script jsdom. env (html: body, scripts: ['http://code.jquery.com/jquery-1.6.min.js'], function (err, window) // Usa jQuery come in qualsiasi normale pagina HTML var $ = window.jQuery, $ body = $ ('body'), $ videos = $ body.find ('. video-entry'); // So che gli elementi di video-entry contengono le miniature di dimensioni regolari // per ognuno degli elementi .video-entry ha trovato $ videos.each (function (i, item) // Userò i normali selettori jQuery var $ a = $ (item) .children ('a'), // primo ancoraggio elemento che è figlio del nostro elemento .video-entry $ title = $ (item) .find ('. video-title .video-long-title'). text (), // titolo video $ time = $ a.find (' .video-time '). text (), // durata del video $ img = $ a.find (' span.clip img '); // thumbnail // e aggiungi tutti i dati al mio array di elementi self.items [i] = href: $ a.attr ('href'), titolo: $ title.trim (), ora: $ time, // ci sono alcune cose con le anteprime dei video di youtube, quelle immagini il cui attributo data-thumb // è definito usano l'url nell'attributo precedentemente citato come src per la miniatura, altrimenti // userà l'attributo src predefinito servito. miniatura: $ img.attr ('data-thumb')? $ img.attr ('data-thumb'): $ img.attr ('src'), urlObj: url.parse ($ a.attr ('href'), true) // analizza il nostro URL e la stringa di query come bene ; ); // vediamo cosa abbiamo console.log (self.items); res.end ( 'Fatto'); ); ); );
È ora di riavviare il nostro server ancora una volta e ricaricare la pagina nel nostro browser (http: // localhost: 3000 / nodetube). Nel tuo terminale, dovresti vedere qualcosa di simile al seguente:
Questo sembra buono, ma abbiamo bisogno di un modo per visualizzare i nostri risultati nel browser. Per questo, userò il motore di template di Jade:
Jade è un motore di template ad alte prestazioni fortemente influenzato da Haml, ma implementato con JavaScript per Node.
Nel tuo editor, apri views / layout.jade
, che è la struttura di base utilizzata per il rendering di una pagina con Express. È bello, ma dobbiamo modificarlo un po '.
!!! 5 html (lang = 'en') head meta (charset = 'utf-8') meta (name = 'viewport', content = "initial-scale = 1, maximum-scale = 1") title = title link (rel = 'stylesheet', href = "http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.css") script (src = 'http: //code.jquery.com/ jquery-1.6.2.min.js ') script (src =' http: //code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.js ') body! = body
Se confronti il codice sopra con il codice predefinito in layout.jade
, noterai che alcune cose sono cambiate: doctype, il meta tag viewport, i tag di stile e script pubblicati da jquery.com. Creiamo la nostra visualizzazione elenco:
Prima di iniziare, consulta la documentazione di jQuery Mobile (JQM d'ora in poi) su layout di pagina e anatomia.
L'idea di base è utilizzare un listino JQM, un'anteprima, un titolo e un'etichetta di durata del video per ciascun elemento all'interno del listview insieme a un link a una pagina video per ciascuno degli elementi elencati.
Nota: Fai attenzione con il rientro che usi nei tuoi documenti Jade, in quanto accetta solo spazi o tabulazioni - ma non entrambi nello stesso documento.
div (data-role = 'page') header (data-role = 'header') h1 = title div (data-role = 'content') // solo controllo di base, avremo sempre gli elementi da youtube però - if (se ( items.length) // crea un wrapper listview ul (data-role = 'listview') // foreach degli elementi raccolti - items.forEach (funzione (elemento) // crea un li li // e un collegamento usando il nostro passato urlObj Object a (href = '/ watch /' + item ['urlObj']. query.v, title = elemento ['titolo']) // e una miniatura img (src = elemento ['miniatura'], alt = "Miniatura") // titolo e ora etichetta h3 = oggetto ['titolo'] h5 = oggetto ['ora'] -)
Questo è tutto ciò di cui abbiamo bisogno per creare il nostro elenco. Ritornare a app.js
e sostituisci il seguente codice:
// vediamo cosa abbiamo console.log (self.items); res.end ( 'Fatto');
con questo:
// Abbiamo tutto ciò di cui siamo venuti, ora rendiamo la nostra vista res.render ('list', title: 'NodeTube', items: self.items);
Riavvia il tuo server ancora una volta e ricarica il browser:
Nota: Poiché utilizziamo jQuery Mobile, consiglio di utilizzare un browser basato su Webkit o un cellulare iPhone / Android (simulatore) per risultati migliori.
Creiamo una visione per il nostro /orologio
itinerario. Creare views / video.jade
e aggiungi il seguente codice:
div (data-role = 'page') header (data-role = 'header') h1 = title div (data-role = 'content') // Il nostro video div div # video // Iframe da youtube che serve il diritto oggetto multimediale per il dispositivo in uso iframe (width = "100%", height = 215, src = "http://www.youtube.com/embed/" + vid, frameborder = "0", allowfullscreen)
Di nuovo, torna al tuo terminale, riavvia il server, ricarica la pagina e fai clic su uno degli elementi elencati. Questa volta verrà visualizzata una pagina video e sarete in grado di riprodurre il video incorporato!
Ci sono modi in cui possiamo mantenere il nostro server in esecuzione in background, ma ce n'è uno che preferisco, chiamato Forever, un modulo nodo che possiamo facilmente installare usando npm
:
npm install forever -g
Questo installerà globalmente Forever. Iniziamo la nostra applicazione nodeTube:
inizia per sempre app.js
È anche possibile riavviare il server, utilizzare file di registro personalizzati, passare le variabili di ambiente tra le altre cose utili:
// avvia la tua applicazione in modalità produzione NODE_ENV = produzione inizia sempre app.js
Spero di aver dimostrato quanto sia facile iniziare a utilizzare Node.js, Express e npm. Inoltre, hai imparato come installare i moduli Nodo, aggiungere rotte a Express, recuperare pagine remote usando il modulo Richiesta e molte altre tecniche utili.
Se avete commenti o domande, fatemelo sapere nella sezione commenti qui sotto!