Pradedančiųjų vadovas „Node.js“ (serverio pusės „JavaScript“)
Node.js - paprastais žodžiais - yra serverio pusės „JavaScript“. Šiomis dienomis tai buvo daug gandai. Jei girdėjote apie tai, ar esate suinteresuotas mokytis ir gauti tam tikrų rankų, šis pranešimas yra skirtas jums.
Taigi, kas būtent reikia naudoti „JavaScript“ serveryje? Kad Node.js sąvoka būtų aiški, norėčiau ją palyginti su įprastomis serverio pusės kalbomis, pvz., PHP. „Node.js“ naudoja įvykių pagrindu veikiančios serverio vykdymo procedūra o ne daugiapakopis vykdymas PHP.
Norėdami tai paaiškinti toliau, kalbėsime apie kas yra „Node.js“ kartu su kai kuriais prieglobos paslaugų teikėjo pasiūlymai ir diegimo patarimai. Būtina žinoti apie „JavaScript“, „jQuery“ ir „Ajax“ žinias, tačiau mes taip pat pateikiame pavyzdžius, kaip suprasti visą dalyką lengviau ir netgi dirbti su juo, todėl susipažinkime su „Node.js“!
Apsvarstykite atvejį:
Apsvarstykite svetainę, kurioje reikia dinamiškai įkelti turinį iš kito lėto serverio. PHP galite tai padaryti dviem būdais - kodavimas jį paprastame faile ir koduoja jį kaip kitą scenarijų, tada vykdant daugiapakopį metodą.
Pirmuoju metodu, nors kodas yra paprastas vykdymas sustabdomas tuo metu, kai prieinamas lėtas žiniatinklio serveris. Antrasis metodas yra labiau optimizuotas, jei tai yra našumas tačiau sunku koduoti ir jis turi daugelio sričių valdymo pridėtines išlaidas. Šis atvejis yra panašus daugeliui kitų interneto programavimo kalbų, išskyrus serverio pusės „JavaScript“, ty „Node.js“.
Kuo skiriasi Node.js? Norint suprasti „Node.js“, reikia nepamiršti „JavaScript“ įvykių programavimas naršyklėje. Mes naudojame tą pačią technologiją. Užuot naudoję atskirą sriegį, a funkcija yra prijungta prie finišo renginio iš “lėtas interneto serverio priėjimas” pirmiau minėta, taigi jūs gaunate visas funkcijas pirmiau minėtame optimizuotame antrajame variante be daugiasluoksnių viršutinių taškų.
Darbo su „Node.js“ pradžia
„Node.js“ yra „JavaScript“. Kodėl negalime panaudoti įvykio pagrindu veikiančios „JavaScript“ funkcijos kliente į serverį? Ši mintis galėjo sukelti „Node.js“ kūrimą.
Tai yra pagrindinis „Node.js“ akcentas - tai yra įvykių pagrindu veikiančios asinchroninės funkcijos. Jis naudoja įvykių kilpa vietoj laukimo I / O operacijų (prieiga prie išorinės žiniatinklio paslaugos, prieigos prie aparatūros).
„Node.js“ vis dar galėjo pasinaudoti jos apdorojimo galia kai serveris laukia kitos operacijos. Tai daro „Node.js“ keičiamo dydžio milijonams vienu metu įjungtų jungčių.
Kaip „JavaScript“ veikia serveryje?
„Node.js“ veikia v8 aplinkoje - tai yra a Virtuali mašina arba a „JavaScript“ variklis kad veikia „JavaScript“ kodas, todėl talpinant negalite naudoti įprastų interneto pavadinimų. Jums reikės tų, kurie turi v8 aplinka.
Štai keletas Node.js prieglobos teikėjo pasiūlymų:
- „Cloud Foundry“
- „Cloudnode“
- DotCloud
- Duostack
„Node.js“ diegimas
Mazgas bus puikiai dirbti Linux, Macintosh ir Solaris operacinėse sistemose. „Windows“ galite ją įdiegti naudojant „Cygwin“ emuliacijos sluoksnį. Nė vienas iš „Windows“ kūrinių nėra patenkinamas, tačiau vis dar įmanoma gauti kažką veikiančio.
1 variantas: pastato mazgas iš šaltinio.
Naudokite padaryti
sukurti ir įdiegti node.js (komandinėje eilutėje atlikite šiuos veiksmus). Reikalingas „Git“.
„git clone“ - 1-oji git: //github.com/joyent/node.git cd mazgo git checkout v0.4.11 eksportuoti JOBS = 2 mkdir ~ / local ./configure --prefix = $ HOME / local / node make make install echo 'export PATH = $ HOME / local / mazgas / bin: $ PATH' >> ~ / .profile echo eksportas NODE_PATH = $ HOME / local / mazgas: $ HOME / local / node / lib / node_modules '>> ~ / .profilio šaltinis ~ / .profile
2 parinktis: „Node.js“ diegimas iš paketo
„Mac“ vartotojams „Node.js“ galite įdiegti kaip paketą iš https://sites.google.com/site/nodejsmacosx/, kuris yra gana savaime suprantamas.
Testavimo mazgo diegimas
Siekiant patikrinti sėkmingą mazgų diegimą, galime išbandyti labai paprastą konsolės programą „Hello World“. Sukurti failą, pavadintą „test.js"ir į jį įveskite šį kodą.
var sys = reikalauti („sys“); sys.puts („Sveiki pasaulis“);
Kodo paaiškinimas:
Jis įkelia sys
klasę į kintamąjį sys
. Tada jis naudoja sys
objektas atlikti konsolės užduotis. The sys.puts
yra komanda, panaši į cout
„C ++“, todėl norėdami paleisti aukščiau esantį scenarijų, eikite į komandų eilutę ir paleiskite ją pagal toliau nurodytą komandą:
mazgas test.js
Jei jūsų diegimas yra sėkmingas, ekrane bus gautas sveikas pasaulis.
HTTP serverio kūrimas
Dabar atėjo laikas sukurti „Hello World“ per žiniatinklio serverį naudojant „Node.js. Štai ką mes darysime - mes sukurti serverį, kuris perduoda a “Labas pasauli” 8080 prievadą nesvarbu, koks URL yra, suteikiant jums idėją įvykis yra.
Kodai:
var sys = reikalauti ("sys"), my_http = reikalauti ("http"); my_http.createServer (funkcija (užklausa, atsakymas) sys.puts ("aš turiu"); response.writeHeader (200, "turinio tipas": "text / plain"); response.write ("Hello World "); answer.end ();). sys.puts („Serveris veikia 8080“);
Kodo paaiškinimas:
Įdomiausia Node.js dalis yra renginys, pagrįstas įvykiu. Norint sukurti HTTP serverį, mums reikia HTTP biblioteka, todėl mes einame į priekį ir įtraukiame jį naudodami my_http
. Mes sukuriame serverį pagal funkciją:
my_http.createServer (funkcija (užklausa, atsakymas) ) klausytis (8080);
Vykdoma pirmojo argumento funkcija kiekvieną kartą, kai 8080 prievadas įjungiamas, taip pati funkcija siūlo, kad mazgas išklausytų 8080 prievado įvykį. Norint tai aptikti, pridėjau a “Aš atmetiau” pranešimas, kuris bus rodomas konsolės ekrane, kai tik gausite užklausą.
The prašymas
objektas visa informacija apie serverio užklausą. Pavyzdžiui, jame yra URL eilutė. The atsakas
objektas yra objektas tvarko atsakymą iš serverio. Pirmiausia nustatome atsakymo antraštę kaip a tekstas / paprastas
turinys, tada išėjimai “Labas pasauli“, tada baigti išėjimo srautą. 200 yra būsenos atsakymas.
Gerai, aukščiau paminėtas yra labai paprastas pavyzdys, bet mes galime matyti, kad bet koks URL, kurį pateikiame naršyklėje tam pačiam serveriui, gauname tą patį rezultatą kaip “Labas pasauli”.
Paprasto statinio failų serverio kūrimas
Kurkite kitą paprastą statinį failų serverį kitoje pamokoje.
Kodai:
var sys = reikalauti ("sys"), my_http = reikalauti ("http"), kelias = reikalauti ("kelias"), url = reikalauti ("url"), filesys = reikalauti ("fs"); my_http.createServer (funkcija (užklausa, atsakymas) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, function (egzistuoja) ) if (! Yra) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 Not found"); answer.end (); other filesys.readFile (full_path, "binary", funkcija (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (klaida + "n"); answer.end (); else response.writeHeader (200); atsakymo rašymas (failas, "dvejetainis"), atsakymas.end ();););). klausytis (8080); sys.puts („Serveris veikia 8080“);
Kodų paaiškinimas:
Minėtas kodas yra gana paprastas, mes jį aptarsime kaip blokus.
var sys = reikalauti ("sys"), my_http = reikalauti ("http"), kelias = reikalauti ("kelias"), url = reikalauti ("url"), filesys = reikalauti ("fs");
Programai reikalingos visos šios bibliotekos. Jo naudojimas bus aiškus sekančiame kode.
var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path);
The prašymas
Objektas turi užklausos detales, kaip aptarėme anksčiau. Mes naudojame analizuoti
URL klasės, į kurią įtraukėme, funkciją pathname
užklausos URL. Po to, kai gausite patname pavadinimą, jį susiejame su dabartinio darbo katalogo keliu, kad galėtume gauti visą failo kelią.
Prisijungimui prie URL turime funkciją, pavadintą prisijungti
kelio bibliotekoje.
path.exists (full_path, funkcija (egzistuoja)
Išsiaiškinus visą kelią, patikrinsime, ar ši funkcija egzistuoja egzistuoja
. Po to, kai patikrinimas bus atliktas, atgalinio ryšio funkcija vadinama ir perduodama kaip antrasis argumentas.
jei (! egzistuoja) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 nerasta"); answer.end (); else filesys.readFile (full_path, "binary", funkcija (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); err + "n"); response.end (); else response.writeHeader (200); atsakymo rašymas (failas, "dvejetainis");
Dabar atgalinio ryšio funkcija, jei failo nėra, siunčiame „“404 puslapis nerastas"klaida.
Jei puslapis rastas, mes perskaitome failą readFile
funkcija failų sistemoje. Taip pat galime matyti atgalinio ryšio funkciją readFile
funkcijos, apibrėžtos ten. Jei nepavyksta skaityti failo, jis bus rodomas. Jei yra klaida, būsena 500 grąžinama su klaidos tekstu.
Taip pat rekomenduoju ankstesnės pamokos įvedimo kodus į funkciją, kad galėtumėte ją naudoti kitoje pamokoje arba būsimam naudojimui.
var sys = reikalauti ("sys"), my_http = reikalauti ("http"), kelias = reikalauti ("kelias"), url = reikalauti ("url"), filesys = reikalauti ("fs"); my_http.createServer (funkcija (užklausa, atsakymas) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, function (egzistuoja) ) if (! Yra) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 Not found"); answer.end (); other filesys.readFile (full_path, "binary", funkcija (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (klaida + "n"); response.end (); else response.writeHeader (200); atsakymo rašymas (failas, "dvejetainis"); answer.end (););); my_http. createServer (funkcija (užklausa, atsakymas) var my_path = url.parse (request.url) .pathname; load_file (my_path, atsakymas);) klausytis (8080); sys.puts („Serverio veikimas 8080“);
Būkite sureguliuoti !
Tai viskas. Tikiuosi, kad tai suteikia jums gerą idėją „Node.js. Kitame straipsnyje parodysiu, kaip tai padaryti „Facebook“ mėgsta naudoti „Node.js“. Būkite sureguliuoti!
Redaktoriaus pastaba: Šį įrašą parašė Geo Paul už Hongkiat.com. Geo yra nepriklausomas interneto / iPhone kūrėjas, kuris naudojasi PHP, Codeigniter, WordPress, jQuery ir Ajax. Jis turi 4 metų patirtį PHP ir 2 metų patirties diegimo telefonu programoje.