Node.js vokser raskt; En av de største grunnene til dette er takk til utviklerne som lager fantastiske verktøy som forbedrer produktiviteten betydelig med Node. I denne artikkelen vil vi gå gjennom den grunnleggende installasjonen av Express, et utviklingsramme og skape et grunnleggende prosjekt med det.
Node er like i design til, og påvirket av, systemer som Ruby's Event Machine eller Python's Twisted. Node tar hendelsesmodellen litt lenger - den presenterer hendelsesløkken som en språkkonstruksjon i stedet for som et bibliotek.
I denne opplæringen vil vi skrape YouTube-startsiden, få alle vanlige miniatyrbilder fra siden, samt koblinger og videovarighetstid, send alle elementene til en jQueryMobile-mal, og spill videoene ved hjelp av YouTube-embed (som gjør en fin jobb med å oppdage enhetsmedierestøtte (flash / html5-video).
Vi vil også lære å begynne å bruke NPM og Uttrykke, npms modulinstallasjonsprosess, grunnleggende Express routing og bruken av to moduler av Node: be om
og jsdom
.
For de som ikke er kjent med Node.js, er og hvordan du installerer den, vennligst se på node.js hjemmeside
og npm GitHub prosjektsiden.
Du bør også se vår "Node.js: Step by Step" -serie.
Merk: Denne opplæringen krever og forutsetter at du forstår hva Node.js er og at du allerede har node.js og npm installert.
Så hva er ekspress? Ifølge utviklerne er det en ...
Insanely raskt (og lite) server-side JavaScript webutvikling rammeverk bygget på Node and Connect.
Høres kult, ikke sant? La oss bruke npm til å installere express. Åpne et Terminal-vindu og skriv inn følgende kommando:
npm installere express -g
Ved å passere -g
Som en parameter til install-kommandoen, forteller vi npm for å gjøre en global installasjon av modulen.
jeg bruker / home / node-server / nettuts
for dette eksempelet, men du kan bruke det du føler deg komfortabel med.
Etter å ha opprettet vårt ekspresprosjekt, trenger vi å isntruct npm for å installere uttrykksmessige avhengigheter.
cd nodetube npm installere -d
Hvis det slutter med, "ok", så er du god til å gå. Du kan nå kjøre prosjektet ditt:
node app.js
I nettleseren din, gå til http: // localhost: 3000
.
En JavaScript-implementering av W3C DOM.
Gå tilbake til Terminal og, etter å ha stoppet din nåværende server (ctr + c), installer jsdom
:
npm installere jsdom
Forenklet HTTP-forespørselsmetode.
Skriv inn følgende i terminalen:
npm installasjonsforespørsel
Alt skal settes opp nå. Nå er det på tide å komme inn i noen faktisk kode!
Først, la oss inkludere alle våre avhengigheter. Åpne din app.js
fil, og i de aller første linjene legger du til følgende kode:
/ ** * Modulavhengigheter. * / var express = krever ('express'), jsdom = krever ('jsdom'), request = krever ('request'), url = krever ('url'), app = module.exports = express.createServer ;
Du vil legge merke til at Express har opprettet kode for oss. Det du ser i app.js
er den mest grunnleggende strukturen for en Node-server ved hjelp av Express. I vår tidligere kodeblokk fortalte vi Express om å inkludere våre nylig installerte moduler: jsdom
og be om
. Vi inkluderer også URL-modulen, som hjelper oss med å analysere videoadressen vi vil skrape fra YouTube senere.
Innenfor app.js
, Søk etter "Ruter" -delen (rundt linje 40) og legg til følgende kode (les gjennom kommentarene for å forstå hva som skjer):
app.get ('/ nodetube', funksjon (req, res) // Fortell forespørselen om at vi vil hente youtube.com, send resultatene til en tilbakeringingsfunksjon forespørsel (uri: 'http://youtube.com ', funksjon (feil, svar, kropp) var self = this; self.items = new Array (); // Jeg føler at jeg vil lagre resultatene mine i en matrise // Bare en grunnleggende feil, se om && response.statusCode! == 200) console.log ('Request error.';; // // Send body param som HTML-koden vi vil analysere i jsdom // også fortelle jsdom å legge ved jQuery i skriptene og lastet inn fra jQuery.com jsdom.env (html: body, scripts: ['http://code.jquery.com/jquery-1.6.min.js'], funksjon (feil, vindu) // Bruk jQuery bare som i en vanlig HTML-side var $ = window.jQuery; console.log ($ ('title'). tekst ()); res.end ($ ('title'). tekst ()););) ;);
I dette tilfellet henter vi innholdet fra YouTube-hjemmesiden. Når du er ferdig, skriver vi ut teksten som finnes i sidens tittelkode (
node app.js
I nettleseren din, gå til: http: // localhost: 3000 / nodetube
Du bør se "YouTube - Broadcast Yourself", som er tittelen på YouTube.
Nå som vi har alt satt opp og går, er det på tide å få noen video nettadresser. Gå til YouTube-hjemmesiden og høyreklikk på hvilken som helst miniatyrbilde fra delen "anbefalte videoer". Hvis du har installert Firebug, (som anbefales på det sterkeste) bør du se noe som følger:
Det er et mønster vi kan identifisere og som er tilstede i nesten alle andre vanlige videolinker:
div.vide-entry span.clip
La oss fokusere på disse elementene. Gå tilbake til redaktøren din, og i app.js
, legg til følgende kode i / nodetube
rute:
app.get ('/ nodetube', funksjon (req, res) // Fortell forespørselen om at vi vil hente youtube.com, send resultatene til en tilbakeringingsfunksjon forespørsel (uri: 'http://youtube.com ', funksjon (feil, svar, kropp) var self = this; self.items = new Array (); // Jeg føler at jeg vil lagre resultatene mine i en matrise // Bare en grunnleggende feil, se om && response.statusCode! == 200) console.log ('Request error.';; // // Send body param som HTML-koden vi vil analysere i jsdom // også fortelle jsdom å legge ved jQuery i skriptene jsdom. env (html: body, scripts: ['http://code.jquery.com/jquery-1.6.min.js'], funksjon (feil, vindu) // Bruk jQuery akkurat som i en vanlig HTML-side var $ = window.jQuery, $ body = $ ('body'), $ videos = $ body.find ('videoinngang'); // Jeg vet .Videoinngangselementer inneholder miniatyrbilder av vanlig størrelse // for hver av videoopptakselementene fant $ videos.each (funksjon (jeg, element) // Jeg vil bruke vanlige jQuery selectors var $ a = $ (item) .children ('a'), // første anker element som er barn av våre .video-oppføringselement $ title = $ (item) .find ('video-title .video-long-title'). tekst (), // video tittel $ time = $ a.find (' .video-tid '). tekst (), // video varighetstid $ img = $ a.find (' span.clip img '); // thumbnail // og legg til alle de dataene til elementene mine selv.items [i] = href: $ a.attr ('href'), tittel: $ title.trim (), tid: $ time, // Det er noen ting med youtube video miniatyrbilder, de bildene som data-thumb attributten // er definert bruker url i det tidligere nevnte attributtet som src for miniatyrbildet, otheriwse // det vil bruke standard servert src attributt. miniatyrbilde: $ img.attr ('data-thumb')? $ img.attr ('data-thumb'): $ img.attr ('src'), urlObj: url.parse ($ a.attr ('href'), sant) // analysere nettadressen og spørrestrengen som vi vil ; ); // la oss se hva vi har console.log (self.items); res.end ( 'Ferdig'); ); ); );
Det er på tide å starte vår server en gang til, og last siden på nytt i nettleseren vår (http: // localhost: 3000 / nodetube). I terminalen din bør du se noe som følger:
Dette ser bra ut, men vi trenger en måte å vise resultatene våre i nettleseren. For dette vil jeg bruke Jade malmotor:
Jade er en høy ytelse malm motor tungt påvirket av Haml, men implementert med JavaScript for Node.
I editoren din, åpne visninger / layout.jade
, som er den grunnleggende layoutstrukturen som brukes når du gjør en side med Express. Det er fint, men vi må endre det litt.
!!! 5 html (lang = 'en') hodet meta (charset = 'utf-8') meta (navn = 'visningsport', innhold = "startskala = 1, maksimumskala = 1") title = tittelkobling = 'stylesheet', href = "http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.css") skript (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 ') kropp! = kropp
Hvis du sammenligner koden ovenfor med standardkoden i layout.jade
, Du vil legge merke til at noen ting har endret seg - doktype, visningsport metakoden, stilen og skriptetikettene servert fra jquery.com. La oss lage vår listevisning:
Før vi begynner, kan du bla gjennom jQuery Mobile's (JQM fra nå av) dokumentasjon på sideoppsett og anatomi.
Den grunnleggende ideen er å bruke et JQM listevisning, en miniatyrbilde, tittel og video varighet etikett for hvert element inne i listevisningen sammen med en lenke til en videoside for hver av de listede elementene.
Merk: Vær forsiktig med innrykket du bruker i Jade-dokumentene dine, da det bare aksepterer mellomrom eller faner - men ikke begge deler i samme dokument.
div (data-roll = 'side') header (data-roll = 'header') h1 = tittel div (data-roll = 'innhold') // bare grunnleggende sjekk, vi vil alltid ha elementer fra youtube skjønt items.length) // lage en listevisning wrapper (data-roll = 'listview') // foreach av de samlede elementene - items.forEach (funksjon (element) // lage en li li // og en lenke ved hjelp av vår passerte urlObj Objekt a (href = '/ watch /' + item ['urlObj'] .query.v, title = item ['title']) // og et miniatyrbilde img (src = item ['miniatyrbilde'], alt = "Miniatyrbilde") // tittel og tidslabel h3 = element ['title'] h5 = item ['time'] -)
Det er alt vi trenger for å lage vår oppføring. Tilbake til app.js
og erstatt følgende kode:
// la oss se hva vi har console.log (self.items); res.end ( 'Ferdig');
med dette:
// Vi har alt vi kom for, la oss nå gjengi visningen res.render ('list', title: 'NodeTube', elementer: self.items);
Start serveren på nytt en gang til, og last opp nettleseren din:
Merk: Fordi vi bruker jQuery Mobile, anbefaler jeg at du bruker en webkitbasert nettleser eller en iPhone / Android-mobiltelefon (simulator) for bedre resultater.
La oss lage en visning for vår /se
rute. Skape visninger / video.jade
og legg til følgende kode:
div (data-roll = 'side') header (data-roll = 'header') h1 = tittel div (data-roll = 'innhold') // Vår video div div # video // Iframe fra youtube som fungerer riktig medieobjekt for enheten som brukes iframe (bredde = "100%", høyde = 215, src = "http://www.youtube.com/embed/" + vid, frameborder = "0", allowfullscreen)
Igjen, gå tilbake til Terminal, start serveren din, last siden på nytt, og klikk på noen av de oppførte elementene. Denne gangen vil en videoside vises, og du vil kunne spille innbøyningsvideoen!
Det finnes måter vi kan holde serveren vår i gang i bakgrunnen, men det er en som jeg foretrekker, kalt Forever, en nodemodul som vi enkelt kan installere ved hjelp av NPM
:
npm installere for alltid -g
Dette vil installere globalt for alltid. La oss starte vårt nodeTube-program:
for alltid begynne app.js
Du kan også starte serveren din igjen, bruke egendefinerte loggfiler, pass miljøvariabler blant andre nyttige ting:
// Kjør din søknad i produksjonsmodus NODE_ENV = Produksjon for alltid, start app.js
Jeg håper jeg har demonstrert hvor lett det er å begynne å bruke Node.js, Express og npm. I tillegg har du lært hvordan du installerer Node-moduler, legge til ruter til Express, hente eksterne sider ved hjelp av Request-modulen, og mange andre nyttige teknikker.
Hvis du har kommentarer eller spørsmål, vennligst gi meg beskjed i kommentarfeltet nedenfor!