Begyndervejledning til Node.js (Server-side JavaScript)
Node.js - i enkle ord - er server-side JavaScript. Det har fået meget buzz i disse dage. Hvis du har hørt om det, eller du er interesseret i at lære og få nogle hænder på det - er dette indlæg for dig.
Så hvad er nøjagtigheden af at bruge JavaScript på serveren? For at gøre begrebet Node.js klart, vil jeg gerne sammenligne det med de almindelige server-side sprog som PHP. Node.js bruger en Hændelsesbaseret serverudførelse snarere end den multithreadede udførelse i PHP.
For at forklare det yderligere taler vi om ideen om hvad Node.js er sammen med nogle hosting udbyder forslag og installation tips. Kendskab til mellemliggende niveauer af JavaScript, jQuery og Ajax er påkrævet, men vi vil også give eksempler for, at du forstår hele grebet lettere og endda arbejder på det, så lad os lære mere om Node.js!
Lad os overveje en sag:
Overvej et websted, hvor du skal indlæse indhold dynamisk fra en anden webserver, som er langsom. I PHP kan du gøre det på 2 måder - kodning det i en simpel fil og kodning det som et andet script, derefter udføre det i en multithreaded tilgang.
I den første metode, selvom koden er enkel udførelsen pauser et stykke tid på det punkt, hvor den langsomme webserver er tilgængelig. Den anden metode er mere optimeret i tilfælde af ydeevne men det er svært at kode, og det har en multithread management overhead. Sagen er ens for de fleste af de øvrige webprogrammeringssprog end server-side JavaScript, dvs. Node.js.
Hvad er forskellen i Node.js? For at forstå Node.js skal du huske på JavaScript's eventbaseret programmering i browseren. Vi benytter den samme teknologi her. I stedet for at bruge en separat tråd, a funktionen er knyttet til målbegivenheden af “langsom webserver adgang” nævnt ovenfor, således får du den fuld funktionalitet i den optimerede anden mulighed nævnt ovenfor uden nogen multithread overhead.
Kom godt i gang med Node.js
Node.js er JavaScript. Hvorfor kan vi ikke bruge den hændelsesbaserede funktionalitet af JavaScript i klienten til en server? Denne tanke kunne have ført til udviklingen af Node.js.
Når det er sagt, det vigtigste højdepunkt i Node.js - Det er event-baserede asynkrone funktioner. Det bruger en hændelsesløkke i stedet for at vente på I / O-operationer (adgang til ekstern webservice, adgang til hardware).
Node.js kunne stadig gøre brug af sin forarbejdningskraft når serveren venter på en anden operation. Dette gør Node.js skalerbar til millioner af samtidige forbindelser.
Hvordan kører JavaScript på en server?
Node.js arbejder på et v8 miljø - det er a virtuel maskine eller a JavaScript-motor der kører JavaScript-koden, så for hosting kan du ikke bruge de almindelige webhoste. Du skal bruge dem, der har v8 miljø.
Her er nogle udbyderforslag til Node.js hosting:
- Cloud Foundry
- Cloudnode
- DotCloud
- Duostack
Installation af Node.js
Node vil fungerer perfekt på Linux, Macintosh og Solaris operativsystemer. På Windows kan du installere det ved hjælp af Cygwin-emuleringslaget. Ingen af bygningerne i Windows er tilfredsstillende, men det er stadig muligt at få noget kørende.
Mulighed 1: Bygningsknude fra kilde.
Brug lave
at bygge og installere node.js (udfør følgende på kommandolinjen). Git er påkrævet.
git klon --depth 1 git: //github.com/joyent/node.git cd node git checkout v0.4.11 eksport JOBS = 2 mkdir ~ / local ./configure --prefix = $ HJEM / lokal / node gør gør installation echo 'eksport PATH = $ HOME / lokal / node / bin: $ PATH' >> ~ / .profile echo 'eksport NODE_PATH = $ HOME / lokal / node: $ HOME / local / node / lib / node_modules' >> ~ / .profile source ~ / .profile
Mulighed 2: Installation af Node.js fra pakken
For Mac-brugere kan du installere Node.js som en pakke fra https://sites.google.com/site/nodejsmacosx/ som er ret selvforklarende.
Testnodeinstallation
For at kontrollere din succesfulde Node-installation kan vi prøve et meget simpelt konsol "Hello World" -program. Opret en fil med navnet "test.js"og skriv følgende kode i den.
var sys = kræver ("sys"); sys.puts ("Hello World");
Kodeforklaring:
Det laster sys
klasse i en variabel sys
. Det bruger derefter sys
protestere mod at udføre konsolopgaverne. Det sys.puts
er en kommando svarende til cout
i C ++, så for at køre scriptet ovenfor gå til kommandoprompten og kør det ved kommandoen nedenfor:
node test.js
Hvis din installation lykkes, får du en hello verdensproduktion på skærmen.
Oprettelse af en HTTP-server
Nu er det tid til at oprette en "Hello World" via webserver ved hjælp af Node.js. Her er hvad vi skal gøre - vi Opret en server, der udsender a “Hej Verden” til lokalhost på havnen 8080 Ligegyldigt hvad URL'en er, giver dig en ide hvad begivenhed er.
Koderne:
var sys = kræver ("sys"), my_http = kræver ("http"); my_http.createServer (funktion (anmodning, svar) sys.puts ("jeg blev sparket"); response.writeHeader (200, "Content-Type": "text / plain"); response.write "); response.end ();). lyt (8080); sys.puts ("Server kører på 8080");
Kodeforklaring:
Den mest interessante del i Node.js er dens begivenhedsbaserede programmering. For at oprette en HTTP server har vi brug for HTTP bibliotek, så vi går videre og tilføjer det ved hjælp af my_http
. Vi opretter server ved hjælp af funktionen:
my_http.createServer (funktion (anmodning respons) ) lytte (8080).;
Funktionen angivet som det første argument udføres hver gang en begivenhed udløses i port 8080, så selve funktionen foreslår noden til at lytte til en begivenhed i havn 8080. For at opdage dette har jeg tilføjet en “Jeg blev sparket” besked, som vises på konsolskærmen, når en anmodning er modtaget.
Det anmodning
objekt indeholder Alle oplysninger om forespørgslen, der er foretaget til serveren. For eksempel indeholder den URL-strengen. Det respons
objekt er objektet som håndterer svaret fra serveren. Først sætter vi hovedet på svaret som en text / plain
indhold og derefter output “Hej Verden“, Slut derefter udgangsstrømmen. 200 er status svaret.
Nå er ovenstående et meget simpelt eksempel, men vi kan se, at uanset webadresse, vi giver i browseren til den samme server, får vi samme output som “Hej Verden”.
Oprettelse af simpel statisk filserver
Lad os oprette en simpel statisk filserver i næste vejledning.
Koderne:
var sys = kræver ("sys"), my_http = kræve ("http"), sti = kræve ("sti"), url = kræve ("url"), filesys = kræve ("fs"); my_http.createServer (funktion (anmodning, svar) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, funktion ) if (! exists) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 ikke fundet \ n"); response.end (); else filesys.readFile (full_path, "binær", funktion (fejl, fil) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write "\ n"); response.end (); else else (response.writeHeader (200); response.write (fil, "binær"); response.end ();;);); lytte (8080); sys.puts ("Server kører på 8080");
Koder forklaring:
Ovennævnte kode er ret simpel, vi diskuterer det som blokke.
var sys = kræver ("sys"), my_http = kræve ("http"), sti = kræve ("sti"), url = kræve ("url"), filesys = kræve ("fs");
Alle disse biblioteker er nødvendige for programmet. Dets brug vil fremgå af følgende kode.
var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path);
Det anmodning
objekt har forespørgsels detaljer som vi har diskuteret tidligere. Vi bruger parse
funktionen af den URL-klasse, som vi har medtaget for at få stinavn
af forespørgselswebadressen. Efter at have hentet stienavnet samler vi det sammen med stien i den aktuelle arbejdsmappe for at få den fulde sti til filen.
For at deltage i webadresser har vi en funktion, der hedder tilslutte
i sti biblioteket.
path.exists (full_path, funktion (findes)
Efter at have fået den fulde sti, kontrollerer vi, om stien eksisterer af funktionen eksisterer
. Efter kontrollen er callback-funktionen kaldet og bestået som det andet argument.
hvis (! eksisterer) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 ikke fundet \ n"); response.end (); else filesys.readFile (full_path, "binær", funktion (err, fil) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write err + "\ n"); response.end (); else ellers response.writeHeader (200); response.write (fil, "binær"); response.end (););
Nu i tilbagekaldelsesfunktionen, hvis filen ikke eksisterer, sender vi en "404 side ikke fundet"fejl.
Hvis siden er fundet, læser vi filen ved hjælp af readFile
funktion i filsystem. Vi kan også se tilbagekaldsfunktionen til readFile
funktion defineret der selv. Hvis der ikke er nogen fejl i læsningen af filen, vises den. Hvis der er en fejl, returneres en status 500 med fejlteksten.
Jeg anbefaler også indpakningskoder fra den tidligere vejledning til en funktion, så du kan bruge den i næste vejledning eller til fremtidig brug.
var sys = kræver ("sys"), my_http = kræve ("http"), sti = kræve ("sti"), url = kræve ("url"), filesys = kræve ("fs"); my_http.createServer (funktion (anmodning, svar) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, funktion ) if (! exists) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 ikke fundet \ n"); response.end (); else filesys.readFile (full_path, "binær", funktion (fejl, fil) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write "\ n"); response.end (); else response.writeHeader (200); response.write (fil, "binær"); response.end ();;;); my_http. createServer (funktion (anmodning, svar) var my_path = url.parse (request.url) .pathname; load_file (my_path, response);). lyt (8080); sys.puts ("Server kører på 8080");
Bliv hængende !
Det er alt. Håber dette giver dig en god ide om Node.js. I den næste artikel viser jeg dig hvordan du skal Belastnings- og visningsnummeret af Facebook kan lide ved at bruge Node.js. Bliv hængende!
Redaktørens note: Dette indlæg er skrevet af Geo Paul til Hongkiat.com. Geo er en uafhængig Web / iPhone-udvikler, der nyder at arbejde med PHP, Codeigniter, WordPress, jQuery og Ajax. Han har 4 års erfaring i PHP og 2 års erfaring iniPhone Application Development.