Startpagina » Coding » Beginner's Guide to Node.js (Server-side JavaScript)

    Beginner's Guide to Node.js (Server-side JavaScript)

    Node.js - in eenvoudige woorden - is dat server-side JavaScript. Het heeft de laatste tijd veel buzz gekregen. Als je er al van gehoord hebt of als je geïnteresseerd bent om het te leren en er een handje van te krijgen - deze post is voor jou.

    Dus wat is precies de behoefte om JavaScript op de server te gebruiken? Om het concept van Node.js duidelijk te maken, zou ik het willen vergelijken met de gewone server-side talen zoals PHP. Node.js gebruikt een op gebeurtenissen gebaseerde procedure voor serveruitvoering in plaats van de multithreaded uitvoering in PHP.

    Om het verder uit te leggen, zullen we het hebben over het idee van wat Node.js is samen met wat suggesties van hostingproviders en installatietips. Tussentijdse kennis van JavaScript, jQuery en Ajax is vereist, maar we zullen ook voorbeelden voor u geven om het hele ding gemakkelijker te begrijpen en er zelfs aan te werken, dus laten we meer weten over Node.js!

    Laten we een geval overwegen:

    Overweeg een website waarin u inhoud dynamisch van een andere webserver moet laden die traag is. In PHP kun je het op twee manieren doen - coderen in een eenvoudig bestand en coderen als een ander script, dan het uitvoeren in een multithreaded aanpak.

    In de eerste methode, ook al is de code eenvoudig de uitvoering wordt een tijdje onderbroken op het punt waar de langzame webserver wordt benaderd. De tweede methode is meer geoptimaliseerd in het geval van prestaties maar het is moeilijk om te coderen en het heeft een multithread management overhead. De casus is vergelijkbaar voor de meeste andere web-programmeertalen dan het JavaScript aan de serverzijde, d.w.z. Node.js.

    Wat is het verschil in Node.js? Om Node.js te begrijpen, moet je de JavaScript's op gebeurtenissen gebaseerde programmering in de browser. We gebruiken hier dezelfde technologie. In plaats van een afzonderlijke thread te gebruiken, functie is gekoppeld aan de finishgebeurtenis van de “trage toegang tot webserver” hierboven vermeld, dus je krijgt de volledige functionaliteit in de geoptimaliseerde tweede optie die hierboven is genoemd, zonder enige multithread-overhead.

    Aan de slag met Node.js

    Node.js is JavaScript. Waarom kunnen we de op gebeurtenissen gebaseerde functionaliteit van JavaScript in de client niet gebruiken voor een server? Deze gedachte heeft mogelijk geleid tot de ontwikkeling van Node.js.

    Dat gezegd hebbende, het belangrijkste hoogtepunt van Node.js - het zijn op gebeurtenissen gebaseerde asynchrone functies. Het gebruikt een gebeurtenis lus in plaats van te wachten op I / O-bewerkingen (toegang tot externe webservice, toegang tot hardware).

    Node.js kan nog steeds gebruik maken van de verwerkingskracht wanneer de server wacht op een andere bewerking. Dit maakt Node.js schaalbaar tot miljoenen gelijktijdige verbindingen.

    Hoe werkt JavaScript op een server?

    Node.js werkt op een v8-omgeving - het is een virtuele machine of a JavaScript-engine die de JavaScript-code uitvoert, dus voor hosting kunt u de gewone webhosts niet gebruiken. Je hebt degenen nodig die de v8 omgeving.

    Hier zijn enkele suggesties van providers voor Node.js hosting:

    1. Cloud Foundry
    2. Cloudnode
    3. DotCloud
    4. Duostack

    Node.js installeren

    Node zal werken perfect op Linux, Macintosh en Solaris-besturingssystemen. In Windows kunt u het installeren met behulp van de Cygwin-emulatielaag. Geen van de builds in Windows voldoet, maar het is nog steeds mogelijk om iets te laten draaien.

    Optie 1: Knooppunt bouwen vanaf bron.

    Gebruik maken om node.js te bouwen en te installeren (voer het volgende uit op de opdrachtregel). Git is verplicht.

     git clone --depth 1 git: //github.com/joyent/node.git cd-node git checkout v0.4.11 export JOBS = 2 mkdir ~ / local ./configure --prefix = $ HOME / local / node make make install echo 'export PATH = $ HOME / local / node / bin: $ PATH' >> ~ / .profile echo 'export NODE_PATH = $ HOME / lokaal / knooppunt: $ HOME / local / node / lib / node_modules' >> ~ / .profile source ~ / .profile 

    Optie 2: Node.js installeren vanuit pakket

    Voor Mac-gebruikers kun je Node.js als een pakket installeren op https://sites.google.com/site/nodejsmacosx/, wat vrij duidelijk is.

    Test Node Installation

    Om je succesvolle Node-installatie te controleren, kunnen we een heel eenvoudig console-programma "Hello World" uitproberen. Maak een bestand met de naam "test.js"en schrijf de volgende code erin.

     var sys = require ("sys"); sys.puts ("Hello World"); 

    Code uitleg:

    Het laadt de sys class in een variabele sys. Het gebruikt dan de sys object om de consoletaken uit te voeren. De sys.puts is een commando dat lijkt op het cout in C ++, dus ga om het bovenstaande script uit te voeren naar de opdrachtprompt en voer het uit met de onderstaande opdracht:

     node test.js 

    Als je installatie succesvol is, krijg je een Hello World-uitvoer op het scherm.

    Een HTTP-server maken

    Nu is het tijd om een ​​"Hello World" te maken via een webserver met Node.js. Dit is wat we gaan doen - wij maak een server aan die a uitvoert “Hallo Wereld” naar de localhost op poort 8080 maakt niet uit wat de URL is, waardoor je een idee krijgt wat evenement is.

    De codes:

     var sys = require ("sys"), my_http = require ("http"); my_http.createServer (functie (verzoek, antwoord) sys.puts ("I got kicked"); response.writeHeader (200, "Content-Type": "text / plain"); response.write ("Hello World "); response.end ();). listen (8080); sys.puts ("Server draait op 8080"); 

    Code uitleg:

    Het meest interessante onderdeel in Node.js is de op gebeurtenissen gebaseerde programmering. Voor het maken van een HTTP-server hebben we de HTTP-bibliotheek, dus we gaan verder en voegen het toe met my_http. We creëren server door de functie:

     my_http.createServer (function (verzoek, respons) ) luisteren (8080).; 

    De functie gegeven als het eerste argument wordt uitgevoerd elke keer dat een gebeurtenis wordt geactiveerd in poort 8080, dus de functie zelf suggereert dat het knooppunt naar een gebeurtenis in poort 8080 luistert. Om dit te detecteren, heb ik een toegevoegd “Ik werd geschopt” bericht dat op het consolescherm wordt weergegeven wanneer een verzoek wordt ontvangen.

    De verzoek object bevat alle informatie over de aanvraag die naar de server is verzonden. Het bevat bijvoorbeeld de URL-reeks. De antwoord object is het object dat behandelt het antwoord van de server. Eerst stellen we de header van het antwoord in als een text / plain inhoud en vervolgens uitgangen “Hallo Wereld“, sluit vervolgens de uitvoerstroom af. 200 is de statusreactie.

    Welnu, de bovenstaande is een heel eenvoudig voorbeeld, maar we kunnen zien dat welke URL we ook in de browser voor dezelfde server geven, we dezelfde output krijgen zoals “Hallo Wereld”.

    Het creëren van een eenvoudige statische bestandsserver

    Laten we een eenvoudige statische bestandsserver maken in de volgende zelfstudie.

    De codes:

     var sys = require ("sys"), my_http = require ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs"); my_http.createServer (functie (verzoek, antwoord) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, function (exists ) if (! exists) response.writeHeader (404, "Content-type": "text / plain"); response.write ("404 Not Found \ n"); response.end (); else filesys.readFile (full_path, "binary", function (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + "\ n"); response.end (); else response.writeHeader (200); response.write (bestand, "binary"); response.end ();););). luister (8080); sys.puts ("Server draait op 8080"); 

    Codes uitleg:

    De bovenstaande code is vrij eenvoudig, we zullen het als blokken bespreken.

     var sys = require ("sys"), my_http = require ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs"); 

    Al deze bibliotheken zijn vereist voor het programma. Het gebruik ervan zal duidelijk zijn in de volgende code.

     var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); 

    De verzoek object heeft de details van de aanvraag zoals we eerder hebben besproken. Wij gebruiken de ontleden functie van de URL-klasse die we hebben opgenomen om de pathname van de aanvraag-URL. Na het verkrijgen van de padnaam worden deze samengevoegd met het pad van de huidige werkdirectory om het volledige pad van het bestand te krijgen.

    Voor het meedoen met URL's hebben we een functie genaamd toetreden in de padbibliotheek.

     path.exists (full_path, functie (bestaat)  

    Na het verkrijgen van het volledige pad controleren we of het pad bestaat door de functie bestaat. Nadat de controle is voltooid, wordt de callback-functie opgeroepen en doorgegeven als het tweede argument.

     if (! exists) response.writeHeader (404, "Content-type": "text / plain"); response.write ("404 niet gevonden \ n"); Response.End ();  else filesys.readFile (full_path, "binary", function (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write ( err + "\ n"); response.end (); else response.writeHeader (200); response.write (bestand, "binary"); response.end (););  

    Nu in de callback-functie als het bestand niet bestaat, sturen we een "404 pagina niet gevonden" fout.

    Als de pagina is gevonden, lezen we het bestand door de readFile functie in bestandssysteem. We kunnen ook de callback-functie voor de readFile functie die daar zelf gedefinieerd is. Als het bestand niet wordt gelezen, wordt het weergegeven. Als er een fout is, wordt een status 500 geretourneerd met de fouttekst.

    Ik raad ook aan om codes van de vorige zelfstudie in een functie te verwerken, zodat u deze in de volgende zelfstudie kunt gebruiken of voor toekomstig gebruik.

     var sys = require ("sys"), my_http = require ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs"); my_http.createServer (functie (verzoek, antwoord) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, function (exists ) if (! exists) response.writeHeader (404, "Content-type": "text / plain"); response.write ("404 Not Found \ n"); response.end (); else filesys.readFile (full_path, "binary", function (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + "\ n"); response.end (); else response.writeHeader (200); response.write (bestand, "binary"); response.end (););); my_http. createServer (functie (request, response) var my_path = url.parse (request.url) .pathname; load_file (my_path, response);). listen (8080); sys.puts ("Server draait op 8080"); 

    Blijf kijken !

    Dat is alles. Ik hoop dat dit je een goed idee geeft van Node.js. In het volgende artikel zal ik je laten zien hoe laad en toon het aantal Facebook-likes met behulp van Node.js. Blijf kijken!

    Opmerking van de uitgever: Dit bericht is geschreven door Geo Paul voor Hongkiat.com. Geo is een onafhankelijke web- / iPhone-ontwikkelaar die graag werkt met PHP, Codeigniter, WordPress, jQuery en Ajax. Hij heeft 4 jaar ervaring in PHP en 2 jaar ervaring in de ontwikkeling van iPhone-applicaties.