Cjelovit vodič za Node.js okvire

Node.js je JavaScript izvršavanje, izgrađeno na Chromeovom V8 JavaScript mehanizmu, koje je prikladno za implementaciju aplikacija na radnoj površini i poslužitelju. Node.js koristi I-O model koji upravlja blokiranjem događaja i čini ga laganim i učinkovitim u usporedbi s navojnim poslužiteljima, kao što su Apache, IIS i vaš tipični Java poslužitelj.

Iako web poslužitelj ili aplikaciju možete implementirati u cijelosti u običnom Node.js kodu, okvir može uvelike smanjiti količinu koda koji trebate napisati. U ovom vodiču istražujemo opseg okvira dostupnih programeru Node.js.

Počinjemo s minimalističkim okvirima sličnim Sinatri kao što je Express, prelazimo na samopouzdanije okvire slične Rails-u kao što je Sails.js, a zatim na okvire s punim slogom s bibliotekama skela i postojanosti kao što je Meteor. Konačno, pokrivamo REST API okvire kao što je LoopBack i nekoliko "drugih" knjižnica u svrhe koje spadaju izvan naših glavnih kategorija (poput ORM, IoT i generiranje statičkih web stranica).

Imajte na umu da klasifikacije nisu dobro odvojene. Postoji nekoliko okvira za koje bi se moglo smatrati da pripadaju više kategorija.

Imajte na umu da ima više Node.js MVC projekata nego što sam ovdje naveo. U nekim sam slučajevima eliminirao projekte koji više nisu aktivni. U drugima sam eliminirao okvire koji nikada nisu privukli značajan interes programera unatoč kontinuiranim aktivnostima. Moj cilj nije da vam kažem o svakom mogućem projektu, već da vam pomognem da identificirate projekte koji bi mogli vrijediti vašeg vremena za procjenu.

MVC okviri za Node.js

MVC (model-view-controller) je paradigma namijenjena čistom razdvajanju funkcionalnosti radne površine ili web aplikacije. Model upravlja temeljnom strukturom podataka. Prikaz upravlja onim što se prikazuje korisniku. A kontroler upravlja onim što se događa kao odgovor na korisničke zahtjeve.

Rails je cjeloviti, "samopouzdani" MVC-ov internetski okvir koji je 2004. godine stvorio David Heinemeier Hansson (zvan DHH) kako bi Ruby-ju omogućio uspostavu mrežne prisutnosti. Rails pretpostavlja da koristite bazu podataka, konvencije vrijednosti nad konfiguracijom i dobro skalirate. Rails-like Node.js MVC okviri su oni s punim značajkama.

Sinatra je mrežni okvir temeljen na MVC-u, manje utemeljen, koji je 2007. stvorio Blake Mizerany, a trenutno ga održava Konstantin Haase. Sinatra je uzeo suprotan pristup od Railsa jer on ima samo ono što vam treba za web aplikaciju, u osnovi rute za postavljanje vaše aplikacije na web s DSL-om (jezikom specifičnim za domenu) preko sloja "stalak". Rack je sloj apstrakcije koji se temelji na Node.js- EventEmitteru i pruža jednostavan način rješavanja podrške klastera.

Sinodera-slični Node.js MVC okviri pokreću se jednostavno i omogućuju vam dodavanje komponenata po potrebi. Mnogi NVE.js MVC okviri slični Sinatri zapravo zapravo vrijede za konfiguraciju, tako da linija između njih i okvira sličnih Railsima nije uvijek jasna.

Povezani videozapis: Savjeti i trikovi za Node.js

U ovom videu s objašnjenjima naučite nekoliko tehnika koje mogu poboljšati vaše iskustvo razvoja Nodea.

MVC okviri slični Sinatri za Node.js

Dijeta

Dijeta se naplaćuje kao maleni, modularni Node.js web okvir koji je dobar za izradu brzih, skalabilnih aplikacija i API-ja. Osnovni dijetni poslužitelj uvelike izgleda poput osnovnog Express poslužitelja:

// Stvaranje aplikacije

  var poslužitelj = zahtijeva ('dijeta')

  var app = poslužitelj ()

  app.listen ('// localhost: 8000')

// Kada se zatraži // localhost: 8000 /, odgovorite s "Hello World!"

  app.get ('/', funkcija ($) {

  $ .end ('Pozdrav svijetu!')

  })

Dijeta ima strukturu koja podržava virtualni hosting bez ikakvih dodatnih modula ili konfiguracije. Primjeri dijetalnih poslužitelja funkcioniraju kao virtualni domaćini. Samo neka slušaju na različitim lukama.

Usmjeravanje u dijeti ne obrađuje samo određene staze s anonimnim funkcijama, kao u app.get()gornjem primjeru, već također može uspostaviti cjevovod međuopreme:

// Registrirajte funkcije međuopreme za put prijenosa

  app.post ('/ upload / picture', upload, obrezivanje, spremanje, završetak)

Node.js prema zadanim postavkama ima dva argumenta requesti responsepri kreiranju HTTP (s) poslužitelja pomoću http.createServer(). Prehrana kombinira ova dva predmeta u jedan signalni objekt koji je predstavljen znakom dolara $. U app.get()gornjem uzorku možete vidjeti da je signalni objekt argument funkcije koja obrađuje getzahtjeve na korijenskoj stazi. Dijeta također podržava Node.js module i može ih koristiti kao međuopreme, kao što je prikazano u app.post()gornjem primjeru.

Izraziti

Express je minimalan i fleksibilan okvir web aplikacija Node.js koji pruža robustan skup značajki za izgradnju jednostrukih, hibridnih i hibridnih web aplikacija. Express API se bavi web aplikacijom, HTTP zahtjevima i odgovorima, usmjeravanjem i srednjim softverom. Od Express 4.x, podržani međuprodukt za Express nalazi se u brojnim zasebnim spremištima, navedenim u repo-u Connect.

Pojavilo se nekoliko vilica i dodataka za Express, uključujući Locomotive, Hapi i Koa. Koa je stvorio jedan od glavnih suradnika Expressa.

Iako je Express stariji i ima veći otisak u usporedbi sa svojim izdanjima, i dalje ima veću zajednicu i veću stabilnost od bilo koje od njih. Stalno vidim Express ugrađen u druge okvire i alate bez komentara, kao da je to jedini mogući izbor za izgradnju web poslužitelja na Node.js.

// stvoriti ekspresnu aplikaciju

const express = zahtijeva ('express')

const app = express ()

app.get ('/', function (req, res) {

res.send ('Pozdrav svijetu!')

})

app.listen (3000, function () {

console.log ('Primjer slušanja aplikacije na portu 3000!)

})

Pegla

Flatiron je dio paketa alata Nodejitsu Node. Autori Flatiron smatraju dvjema stvarima: Prvo, inicijativom za izgradnju kolekcije nevezanih alata s visokim standardima kvalitete i izvedbe. I drugo, cjeloviti okvir za razvoj web aplikacija koji ove alate pakira kako bi olakšao izomorfni i stream-based razvoj aplikacija.

Flatiron je sličan Sinatri jer sve što trebate učiniti da biste ga koristili kao web poslužitelj jest da napravite requireinstancu aplikacije i koristite http dodatke, postavite neke rute i pokrenete aplikaciju, kao što je prikazano na donjoj snimci zaslona.

Ostali dijelovi apartmana nadopunjuju flatironovu funkcionalnost. Na primjer, Broadway izlaže jednostavan API "dodatka", zamjenjujući inverziju registracije kontrole koju koriste drugi Node MVC okviri. Union je hibridna baferirana / streaming jezgra međuopreme, koja je unatrag kompatibilna s Connectom. Union je dio koji isporučuje http dodatak.

// izraditi flatiron aplikaciju

var flatiron = zahtijeva ('flatiron'), 

  app = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get ('/', function () {

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

  this.res.end ('Pozdrav svijetu! \ n');

});

app.start (8080);

Hapi

Hapi je jednostavan za upotrebu, usmjeren na konfiguraciju, s ugrađenom podrškom za provjeru ulaznih podataka, predmemoriranje, provjeru autentičnosti i druge bitne sadržaje za izgradnju web i aplikacija. Hapi omogućava programerima da se usredotoče na pisanje logike višekratne upotrebe visoko modularnog i preskriptivnog pristupa. Hapi je razvio Walmart Labs i dobar je izbor za velike timove i velike projekte.

Hapi je prvotno izgrađen na vrhu Expressa, ali je kasnije redizajniran da bude samostalan. Kako su rekli njegovi tvorci, Hapi je izgrađen s idejom da je konfiguracija bolja od koda i da poslovna logika mora biti izolirana od transportnog sloja. U primjeru u nastavku primijetite kako se u kodu pojavljuje jasna i čista konfiguracija ruta poslužitelja.

// stvoriti hapi poslužitelj

var Hapi = zahtijeva ('hapi');

var poslužitelj = novi Hapi.Server (3000);

server.route ([

  {

    metoda: 'GET',

    putanja: '/ api / items',

    rukovatelj: funkcija (zahtjev, odgovor) {

      odgovor ('Dohvati ID predmeta');

    }

  },

  {

    metoda: 'GET',

    putanja: '/ api / items / {id}',

    rukovatelj: funkcija (zahtjev, odgovor) {

      odgovor ('Dobiti id predmeta:' + request.params.id);

    }

  },

Koa

Koa je noviji web okvir koji je dizajnirao tim koji stoji iza Expressa, ali neovisan o Express kodu. Koa želi biti manja, izražajnija i robusnija osnova za web aplikacije i API-je. Koa koristi ES6 generatore za posrednički softver umjesto Node.js povratnih poziva. Slijedi Koa aplikacija "Hello, World" koja koristi generator koji vrši yield nextprosljeđivanje kontrole sljedećem generatoru:

var koa = zahtijeva ('koa');

var app = koa ();

// x-vrijeme odziva

app.use (funkcija * (sljedeća) {

  var start = novi datum;

  prinos sljedeći;

  var ms = novi datum - početak;

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

});

// odgovor

app.use (funkcija * () {

  this.body = 'Pozdrav svijetu';

});

app.listen (3000);

Postoji razlika između generatora posredničkog softvera koje koristi Koa i povratnih poziva koje koriste Express i Connect. Implementacija Connect-a jednostavno prolazi kontrolu kroz niz funkcija dok se jedna ne vrati, dok Koa daje "nizvodno", a zatim kontrola teče natrag "uzvodno".

U gornjem primjeru, x-vrijeme odziva "omotava" generator odgovora, yield nextizjavom koja označava poziv. Prinos je fleksibilniji od eksplicitnih poziva funkcije, jer olakšava umetanje drugog generatora u niz, na primjer web zapisnika između tajmera i odgovora.

Lokomotiva

Locomotive je mrežni okvir za Node.js koji podržava MVC obrasce, RESTful rute i konvencije oko konfiguracije (poput Rails), dok se neprimjetno integrira s bilo kojim motorom baze podataka i predložaka. Lokomotiva se nadovezuje na Express i Connect.

Lokomotiva dodaje da izrazite neke Ruby na šina poput strukture, koje možete vidjeti na slici ispod. Prikazi lokomotive često su ugrađene JavaScript (html.ejs) datoteke, kao što je ovdje prikazano, ali Locomotive također podržava Jade i ostale sukladne motore za Express. Funkcionalnošću REST upravljaju rute, kao što je to obično slučaj na poslužiteljima temeljenim na Expressu. S Locomotive možete koristiti bilo koju bazu podataka i ORM sloj koji želite. Vodič prikazuje upotrebu MongoDB-a s Mongoose-om, kao i upotrebu putovnice za autentifikaciju korisnika.

Ukupno.js

Total.js je potpuno opremljeni okvir na strani poslužitelja za Node.js, napisan u čistom JavaScriptu, slično PHP-ovom Laravel ili Pythonovom Djangu. Platforma Total.js zbirka je knjižnica, paketa i dovršenih proizvoda izrađenih s Total.js.

Total.js je sličniji Sinatri nego Railsu po tome što je modularan i zato što je agnostičan oko IDE-a, baza podataka i okvira na strani klijenta. Minimalni Total.js web poslužitelj može se implementirati sa sljedećim kodom:

zahtijeva ('total.js');

F.route ('/', function () {

    this.plain ('total.js je stvarno dobar!');

});

F.http ('otklanjanje pogrešaka');

Povezani videozapis: Savjeti i trikovi za Node.js

MVC okviri nalik tračnicama za Node.js

Adonis

Adonis je MVC okvir za Node.js izgrađen oko slučajeva praktične upotrebe. Podržava ubrizgavanje ovisnosti i ima tanki IoC spremnik (inverzija kontrole) koji vam pomaže riješiti i ismijati ovisnosti. Adonis nudi CLI alat za skeliranje i generiranje projekta sa svim potrebnim ovisnostima.

Među značajkama Adonisa su ORM (Lucid) i provedba aktivnog uzorka dizajna zapisa; sloj provjere autentičnosti u paketu sa sesijama, JWT-om, osnovnom provjerom autentičnosti i osobnim API tokenima; i implementacija kontrolera kao klase ES2015. Generatori ES2015 uklanjaju neuredne povratne pozive uobičajene u starijim JavaScriptima. Sljedeći kod dohvaća sve korisnike iz baze podataka i vraća ih kao JSON:

const Route = use ('Route')

const User = use ('App / Model / User')

Route.get ('/', funkcija * (zahtjev, odgovor) {

  const users = prinos User.all ()

  response.json (korisnici)

})

SpojJS

Formula iza CompoundJS-a je Express + struktura + proširenja. Ovdje je struktura standardni izgled direktorija, a proširenja su Node.js moduli koji dodaju funkcionalnost okviru. Cilj je pružiti očito i dobro organizirano sučelje za razvoj aplikacija kompatibilnih s Expressom. To znači da će sve što radi s Expressom raditi s CompoundJS.

Iz CLI-a možete generirati skeletne aplikacije CompoundJS:

npm instalirati spoj -g

složeni init todo-list-app

cd todo-list-app && npm install

čvor.

Web mjesto po defaultu sluša // localhost: 3000 /. Pomoću compound generate scaffoldnaredbe možete nastaviti dodavati skele na temelju modela .

Geddy

Okvir Geddy implementira MVC za Node.js na krajnje sličan Rails načinima, čak i do strukture direktorija, mogućnosti otvaranja REPL konzole u kontekstu aplikacije i skripte generatora koju možete koristiti za stvaranje aplikacija, resursa skele ili goli modeli i kontroleri. Skele po želji mogu generirati predloške EJS, Jade, upravljača, brkova i Swiga.

geddy jakeNaredba može pokrenuti razne Jake (JavaScript make) zadatke u kontekstu trenutne aplikacije, s punim pristupom modela. Ovo je korisno za pomoćne zadatke poput testiranja, inicijalizacije razvojne baze podataka i popisa ruta.

Kraken

Kraken, PayPal projekt otvorenog koda, siguran je i skalabilan sloj koji proširuje Express pružajući strukturu i konvencije, slično kao Locomotive. Iako je Kraken glavni stup njegovog okvira, sljedeći se moduli također mogu koristiti samostalno: Lusca (zaštita), Kappa (NPM proxy), Makara (LinkedIn Dust.js i18N) i Adaro (LinkedIn Dust.js Templating).