Programavimas

Išsamus „Node.js“ sistemų vadovas

„Node.js“ yra „JavaScript“ vykdymo laikas, sukurtas „Chrome“ V8 „JavaScript“ variklyje, tinkantis diegti darbalaukio ir serverio programas. „Node.js“ naudoja įvykių valdomą, neužblokuojantį įvesties / išvesties modelį, kuris daro jį lengvą ir efektyvų, palyginti su srieginiais serveriais, tokiais kaip „Apache“, IIS ir jūsų tipinis „Java“ serveris.

Nors tu gali Įdiegę žiniatinklio serverį ar programą visiškai paprastu „Node.js“ kodu, sistema gali gerokai sumažinti kodą, kurį reikia parašyti. Šiame vadove apžvelgsime „Node.js“ kūrėjui prieinamų sistemų spektrą.

Pradedame nuo minimalistinių „Sinatra“ struktūrų, tokių kaip „Express“, pereiname prie labiau į „Rails“ panašių struktūrų, tokių kaip „Sails.js“, tada pereiname prie „full-stack“ karkasų su pastolių ir atkaklumo bibliotekomis, tokiomis kaip „Meteor“. Galiausiai aptariame REST API sistemas, tokias kaip „LoopBack“, ir keletą „kitų“ bibliotekų tikslams, kurie nepatenka į mūsų pagrindines kategorijas (pvz., ORM, IoT ir statinių svetainių generavimą).

Atkreipkite dėmesį, kad klasifikacijos nėra gerai atskirtos. Yra keletas sistemų, kurios gali būti laikomos priklausančiomis kelioms kategorijoms.

Atkreipkite dėmesį, kad yra daugiau „Node.js“ MVC projektų, nei aš čia išvardinau. Kai kuriais atvejais pašalinau nebeaktyvius projektus. Kituose, aš pašalinau sistemas, kurios niekada nesulaukė didelio kūrėjų susidomėjimo, nepaisant nuolatinės veiklos. Mano tikslas nėra papasakoti apie kiekvieną įmanomą projektą, o padėti jums nustatyti projektus, kurie gali būti verti jūsų vertinimo laiko.

„Node.js“ MVC sistemos

MVC (model-view-controller) yra paradigma, skirta švariai padalyti darbalaukio ar žiniatinklio programos funkcionalumą. Modelis valdo pagrindinę duomenų struktūrą. Rodinyje tvarkoma tai, kas rodoma vartotojui. Valdiklis valdo tai, kas vyksta atsakant į vartotojo užklausas.

„Rails“ yra visapusiška, „nuomonėmis paremta“ MVC pagrįsta žiniatinklio sistema, kurią 2004 m. Sukūrė Davidas Heinemeieris Hanssonas (dar žinomas kaip DHH), kad suteiktų Ruby galimybę užmegzti internetą. „Rails“ daro prielaidą, kad naudojate duomenų bazę, gerai vertina konfigūracijos ir konfigūracijos susitarimus „Rails“ tipo „Node.js“ MVC sistemos yra visos funkcijos.

„Sinatra“ yra plika pagrindų, mažiau nuomonių turinti MVC pagrindu sukurta interneto sistema, kurią 2007 m. Sukūrė Blake'as Mizerany ir kurią šiuo metu prižiūri Konstantinas Haase. „Sinatra“ laikėsi priešingo „Rails“ požiūrio, nes jame yra tik tai, ko reikia žiniatinklio programai, iš esmės maršrutai, kaip jūsų programą įdėti į internetą naudojant DSL (domenui būdingą kalbą) per „stovo“ sluoksnį. „Rack“ yra abstrakcijos sluoksnis, pagrįstas „Node.js“ „EventEmitter“ir pateikia paprastą būdą, kaip elgtis palaikant klasterius.

„Sinatra“ tipo „Node.js“ MVC sistemos yra tos, kurios prasideda paprastai ir leidžia jums pridėti komponentų, jei reikia. Daugelis „Sinatra“ panašių „Node.js“ MVC sistemų iš tikrųjų vertina susitarimus, palyginti su konfigūracija, todėl linija tarp šių ir į „Rails“ panašių sistemų nėra visada aiški.

Susijęs vaizdo įrašas: „Node.js“ patarimai ir gudrybės

Šiame aiškinamojo vaizdo įraše sužinokite keletą būdų, kurie gali pagerinti jūsų mazgų kūrimo patirtį.

„Sinatra“ tipo „MVC“ sistemos, skirtos „Node.js“

Dieta

Dieta atsiskaito už mažą, modulinę „Node.js“ žiniatinklio sistemą, kuri yra naudinga kuriant greitas, keičiamo dydžio programas ir API. Pagrindinis dietos serveris atrodo labai panašus į pagrindinį „Express“ serverį:

// Sukurkite programą

var serveris = reikalauti (‘dieta’)

var app = serveris ()

app.listen (‘// localhost: 8000’)

// Kai paprašoma // localhost: 8000 /, atsakykite „Sveikas pasaulis!“

app.get (‘/’, funkcija ($) {

$ .end („Labas pasaulis!“)

  })

Dieta turi struktūrą, palaikančią virtualų prieglobą be jokių papildomų modulių ar konfigūracijos. Dietos serverio egzemplioriai veikia kaip virtualūs kompiuteriai. Tiesiog leisk jiems klausytis skirtinguose uostuose.

Dietos parinkimas ne tik tvarko konkrečius kelius su anoniminėmis funkcijomis, kaip ir app.get () aukščiau pateiktą pavyzdį, bet taip pat gali sukurti tarpinės programinės įrangos liniją:

// Užregistruokite tarpinės programinės įrangos funkcijas įkėlimo kelyje

app.post (‘/ upload / picture’, įkelkite, apkarpykite, išsaugokite, baigkite)

„Node.js“ pagal numatytuosius nustatymus turi du argumentus: prašymą ir atsakymą, kurdami HTTP (-ių) serverį naudodami http.createServer (). Dieta sujungia šiuos du objektus į vieną signalo objektą, kurį žymi dolerio ženklas $. Galite pamatyti app.get () aukščiau, kad signalo objektas yra funkcijos, kurią valdo, argumentas gauti užklausos pagrindiniame kelyje. Dieta taip pat palaiko Node.js modulius ir gali juos naudoti kaip tarpinę programinę įrangą, kaip parodyta app.post () aukščiau pateiktas pavyzdys.

Išreikšti

„Express“ yra minimali ir lanksti „Node.js“ žiniatinklio programų sistema, teikianti patikimą funkcijų rinkinį, skirtą kurti vieno, kelių puslapių ir hibridines žiniatinklio programas. „Express“ API teikia žiniatinklio programą, HTTP užklausas ir atsakymus, maršrutą ir tarpinę programinę įrangą. Nuo „Express 4.x“ palaikoma „Express“ tarpinė programinė įranga yra daugelyje atskirų saugyklų, nurodytų „Connect“ saugykloje.

Atsirado keletas „Express“ šakių ir priedų, įskaitant „Locomotive“, „Hapi“ ir „Koa“. „Koa“ sukūrė vienas pagrindinių „Express“ bendradarbių.

Nors „Express“ yra senesnė ir turi didesnį pėdsaką, palyginti su „Scions“, ji vis tiek turi didesnę bendruomenę ir daugiau stabilumo nei bet kuris iš jų. Aš nuolat matau, kad „Express“ be komentarų yra įtraukta į kitas sistemas ir įrankius, tarsi tai būtų vienintelis galimas pasirinkimas norint sukurti žiniatinklio serverį „Node.js“.

// sukurti greitąją programą

const express = reikalauti (‘express’)

const app = express ()

app.get (‘/’, function (req, res) {

res.send (‘Sveikas pasaulis!’)

})

app.listen (3000, funkcija () {

console.log (‘Programos klausymo pavyzdys 3000 prievade!)

})

Plokščias geležis

„Flatiron“ yra „Nodejitsu Node“ įrankių rinkinio dalis. Autoriai mano, kad „Flatiron“ yra du dalykai: pirma, iniciatyva sukurti atsietų įrankių kolekciją, užtikrinančią aukštą kokybės ir našumo standartą. Antra, visos programos žiniatinklio programų kūrimo sistema, sudedanti šiuos įrankius, kad būtų lengviau kurti izomorfiškas ir srautu pagrįstas programas.

„Flatiron“ yra panašus į „Sinatra“, nes viskas, ką jums reikia padaryti, kad galėtumėte naudoti jį kaip interneto serverį, yra reikalauti ją, supaprastinkite programą ir naudokite „http“ papildinius, nustatykite keletą maršrutų ir paleiskite programą, kaip parodyta toliau pateiktame ekrano kopijoje.

Kiti liukso numeriai papildo lygintuvo funkcionalumą. Pavyzdžiui, Brodvėjus atskleidžia paprastą „įskiepio“ API, pakeisdamas valdymo registracijos inversiją, naudojamą kitose „Node MVC“ sistemose. „Union“ yra hibridinis buferinis / srautinio perdavimo tarpinės programinės įrangos branduolys, suderinamas atgaliniu būdu su „Connect“. „Union“ yra kūrinys, tiekiantis „http“ papildinį.

// sukurti „flatiron“ programą

var flatiron = reikalauti („flatiron“),

app = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get (‘/’, function () {

this.res.writeHead (200, {‘Content-Type’: ‘text / plain’});

this.res.end (‘Sveikas pasauli! \ n’);

});

app.start (8080);

Hapi

„Hapi“ yra paprasta naudoti, į konfigūraciją orientuota sistema su įmontuota įvesties patvirtinimo, talpyklos talpinimo, autentifikavimo ir kitų būtinų priemonių žiniatinklio ir paslaugų programoms kurti palaikymu. „Hapi“ leidžia kūrėjams sutelkti dėmesį į daugkartinio naudojimo programų logikos rašymą taikant labai modulinį ir receptinį metodą. „Hapi“ sukūrė „Walmart Labs“ ir tai yra geras pasirinkimas didelėms komandoms ir dideliems projektams.

„Hapi“ iš pradžių buvo pastatytas ant „Express“, bet vėliau buvo pertvarkytas, kad būtų atskiras. Kaip teigė jos kūrėjai, „Hapi“ buvo pastatyta su mintimi, kad konfigūracija yra geriau nei kodas ir kad verslo logika turi būti izoliuota nuo transporto sluoksnio. Žemiau pateiktame pavyzdyje atkreipkite dėmesį į tai, kaip kode aiški ir švari serverio maršrutų konfigūracija.

// sukurti „Hapi“ serverį

var Hapi = reikalauti (‘hapi’);

var serveris = naujas „Hapi.Server“ (3000);

server.route ([

  {

metodas: „GAUTI“,

kelias: „/ api / items“,

tvarkytojas: funkcija (prašymas, atsakymas) {

atsakymas (‘Gauti prekės ID’);

    }

  },

  {

metodas: „GAUTI“,

kelias: ‘/ api / items / {id}’,

tvarkytojas: funkcija (prašymas, atsakymas) {

atsakymas (‘Gauti prekės ID:’ + request.params.id);

    }

  },

Koa

„Koa“ yra naujesnė žiniatinklio sistema, kurią sukūrė „Express“ komanda, tačiau nepriklauso nuo „Express“ kodo. „Koa“ siekia būti mažesnis, išraiškingesnis ir tvirtesnis žiniatinklio programų ir API pagrindas. Koa naudoja ES6 generatorius tarpinei programinei įrangai, o ne „Node.js“ skambučiams. Toliau pateikiama „Hello, World“ Koa programa, naudojanti generatorių derlius kitas perduoti valdymą kitam generatoriui:

var koa = reikalauti (‘koa’);

var app = koa ();

// x-response-time

app.use (funkcija * (kita) {

var start = nauja data;

derlius kitas;

var ms = nauja data - pradžia;

this.set (‘X-Response-Time’, ms + ‘ms’);

});

// atsakymas

app.use (funkcija * () {

this.body = ‘Sveikas pasaulis’;

});

app.listen (3000);

Yra skirtumas tarp tarpinės programinės įrangos generatorių, kuriuos naudoja „Koa“, ir atgalinių skambučių, kuriuos naudoja „Express“ ir „Connect“. „Connect“ įgyvendinimas paprasčiausiai perduoda valdymą per daugybę funkcijų, kol viena grįžta, o „Koa“ duoda „pasroviui“, tada valdymas grįžta „prieš srovę“.

Ankstesniame pavyzdyje x atsako laikas „apgaubia“ atsako generatorių su derlius kitas kvietimą žymintis pareiškimas. Derlius yra lankstesnis nei aiškių funkcijų iškvietimai, nes tai leidžia į eilę lengvai įterpti kitą generatorių, pavyzdžiui, žiniatinklio kaupiklį tarp laikmačio ir atsako.

Lokomotyvas

„Lokomotyvas“ yra „Node.js“ žiniatinklio sistema, palaikanti MVC modelius, „RESTful“ maršrutus ir konfigūracijos susitarimus (pvz., „Rails“), sklandžiai integruojanti su bet kokia duomenų baze ir šablonų varikliu. Lokomotyvas remiasi „Express“ ir „Connect“.

Lokomotyvas papildo „Express“ kai kurie „Ruby-on-Rails“ tipo struktūra, kurią galite pamatyti žemiau esančiame paveikslėlyje. Lokomotyvo rodiniai dažnai yra įterpti „JavaScript“ (html.ejs) failai, kaip parodyta čia, tačiau „Locomotive“ taip pat palaiko „Jade“ ir kitus reikalavimus atitinkančius „Express“ šablonų variklius. „REST“ funkciją valdo maršrutai, kaip paprastai būna „Express“ pagrindu veikiančiuose serveriuose. „Locomotive“ galite naudoti bet kokią norimą duomenų bazę ir ORM sluoksnį. Vadovas parodo, kaip naudoti „MongoDB“ su „Mongoose“, taip pat naudoti „Passport“ vartotojo autentifikavimui.

Total.js

„Total.js“ yra pilnavertis „Node.js“ serverio karkasas, parašytas grynu „JavaScript“, panašus į PHP „Laravel“ ar „Python“ „Django“. „Total.js“ platforma yra bibliotekų, paketų ir užbaigtų produktų rinkinys, sukurtas naudojant „Total.js“.

„Total.js“ yra labiau panašus į „Sinatra“ nei į „Rails“, nes yra modulinis ir todėl, kad jis agnostizuoja IDE, duomenų bazes ir kliento pusės sistemas. Minimalų „Total.js“ tinklo serverį galima įdiegti naudojant šį kodą:

reikalauti (‘total.js’);

F. maršrutas (‘/’, funkcija () {

this.plain (‘total.js yra tikrai geras!’);

});

F.http („derinti“);

Susijęs vaizdo įrašas: „Node.js“ patarimai ir gudrybės

Į bėgius panašūs „Node.js“ MVC karkasai

Adonis

„Adonis“ yra „Node.js“ MVC sistema, sukurta remiantis praktinio naudojimo atvejais. Jis palaiko priklausomybės injekciją ir turi mažą IoC (valdymo inversija) talpyklą, kuri padės išspręsti ir pajuokti priklausomybes. „Adonis“ teikia CLI įrankį, kad sukonstruotų ir sugeneruotų projektą su visomis reikalingomis priklausomybėmis.

Tarp „Adonis“ bruožų yra ORM („Lucid“) ir aktyvaus įrašų dizaino modelio įgyvendinimas; autentifikavimo sluoksnis, susidedantis iš sesijų, JWT, pagrindinio autentifikavimo ir asmeninių API žetonų; ir valdiklių, kaip ES2015 klasių, įdiegimas. ES2015 generatoriai pašalina netvarkingus atgalinius skambučius, paplitusius senesnėse „JavaScript“. Šis kodas nuskaito visus vartotojus iš duomenų bazės ir grąžina juos kaip JSON:

const Route = naudojimas (‘Route’)

const Vartotojas = use („Programa / Modelis / Vartotojas“)

Route.get (‘/’, funkcija * (užklausa, atsakymas) {

const vartotojai = derlius User.all ()

response.json (vartotojai)

})

JunginysJS

„CompoundJS“ formulė yra „Express +“ struktūra + plėtiniai. Čia struktūra yra standartinis katalogų išdėstymas, o plėtiniai yra „Node.js“ moduliai, kurie suteikia sistemai funkcionalumo. Tikslas yra pateikti akivaizdžią ir gerai organizuotą sąsają „Express“ suderinamoms programoms kurti. Tai reiškia, kad viskas, kas veikia su „Express“, veiks ir su „CompoundJS“.

Galite sukurti „CompeletJS“ skeleto programas iš CLI:

npm įdiegti junginį -g

junginys init todo-list-app

CD „todo-list-app“ ir & npm įdiegti

mazgas.

Pagal numatytuosius nustatymus svetainė klausosi // localhost: 3000 /. Galite pridėti pastolius pagal modelius su junginys sukuria pastolius komandą.

Geddy

„Geddy“ sistema įgyvendina „Node.js“ MVC ypač panašiai į „Rails“, net iki katalogų struktūros, galimybės atidaryti „REPL“ konsolę programos kontekste ir generatoriaus scenarijų, kurį galite naudoti kurdami programas, išteklius pastoliai, arba pliki modeliai ir valdikliai. Pastoliais galima pasirinkti EJS, Jade, vairo, ūsų ir Swig šablonus.

geddy jake komanda gali paleisti įvairius „Jake“ padaryti) užduotis dabartinės programos kontekste, suteikiant visišką prieigą prie modelių. Tai naudinga atliekant papildomas užduotis, tokias kaip bandymai, kūrimo duomenų bazės inicijavimas ir maršrutų sąrašas.

Kraken

„Kraken“, „PayPal“ atvirojo kodo projektas, yra saugus ir keičiamo dydžio sluoksnis, pratęsiantis „Express“ teikiant struktūrą ir susitarimus, panašiai kaip „Locomotive“. Nors „Kraken“ yra pagrindinis jos sistemos ramstis, šiuos modulius taip pat galima naudoti nepriklausomai: „Lusca“ (apsauga), „Kappa“ („NPM Proxy“), „Makara“ („LinkedIn Dust.js i18N“) ir „Adaro“ („LinkedIn Dust.js“ šablonai).