Ohjelmointi

Node.js-kehysten täydellinen opas

Node.js on Chromen V8-JavaScript-moottoriin rakennettu JavaScript-ajonaikainen sovellus, joka soveltuu sekä työpöytä- että palvelinsovellusten toteuttamiseen. Node.js käyttää tapahtumavetoista, estämätöntä I / O-mallia, joka tekee siitä kevyen ja tehokkaan verrattuna kierteisiin palvelimiin, kuten Apache, IIS ja tyypillinen Java-palvelimesi.

Kun sinä voi Toteuttamalla verkkopalvelin tai -sovellus kokonaan tavallisella Node.js-koodilla, kehys voi vähentää merkittävästi kirjoittamasi koodin määrää. Tässä oppaassa tutkimme Node.js-kehittäjän käytettävissä olevien kehysten valikoimaa.

Aloitamme minimalistisilla Sinatran kaltaisilla kehyksillä, kuten Express, siirrymme mielipiteellisempiin Rails-tyyppisiin kehyksiin, kuten Sails.js, sitten täyspinoisiin kehyksiin, joissa on telineet ja pysyvyyskirjastot, kuten Meteor. Lopuksi käsittelemme REST-sovellusliittymäkehyksiä, kuten LoopBack, ja muutamia "muita" kirjastoja tarkoituksiin, jotka eivät kuulu pääluokkiin (kuten ORM, IoT ja staattisten sivustojen luominen).

Huomaa, että luokitukset eivät ole hyvin erotettu toisistaan. On olemassa useita kehyksiä, joiden voidaan katsoa kuuluvan useisiin luokkiin.

Huomaa, että Node.js MVC -projekteja on enemmän kuin olen luetellut tässä. Joissakin tapauksissa poistin projektit, jotka eivät ole enää aktiivisia. Toisissa eliminoin kehykset, jotka eivät koskaan herättäneet merkittävää kehittäjien kiinnostusta jatkuvasta aktiivisuudesta huolimatta. Tavoitteenani ei ole kertoa teille jokaisesta mahdollisesta projektista, vaan auttaa sinua tunnistamaan hankkeet, jotka saattavat olla arvoisia arviointiaikaa varten.

MVC-kehykset Node.js: lle

MVC (model-view-controller) on paradigma, jonka tarkoituksena on jakaa työpöydän tai verkkosovelluksen toiminnot puhtaasti. Malli hallinnoi taustalla olevaa tietorakennetta. Näkymä hallitsee sitä, mitä näytetään käyttäjälle. Ja ohjain hallitsee mitä tapahtuu vastauksena käyttäjän pyyntöihin.

Rails on monipuolinen, "mielipidekäsitelty" MVC-pohjainen verkkokehys, jonka David Heinemeier Hansson (alias DHH) loi vuonna 2004 antamaan Rubylle tavan perustaa verkko. Rails olettaa, että käytät tietokantaa, arvostaa sopimusta kokoonpanon suhteen ja skaalaa hyvin. Railsin kaltaiset Node.js MVC -kehykset ovat täysin varusteltuja.

Sinatra on paljain perusteet, vähemmän mielipiteitä sisältävä MVC-pohjainen verkkokehys, jonka Blake Mizerany loi vuonna 2007 ja jota ylläpitää tällä hetkellä Konstantin Haase. Sinatra omaksui Railsin päinvastaisen lähestymistavan siinä mielessä, että sillä on vain mitä tarvitset verkkosovellukselle, periaatteessa reitit sovelluksen sijoittamiseksi verkkoon DSL: llä (verkkotunnuskieli) "teline" -kerroksen yli. Rack on abstraktiokerros, joka perustuu Node.js-tiedostoon Tapahtuman lähettäjä, ja tarjoaa yksinkertaisen tavan käsitellä klusteritukea.

Sinatran kaltaiset Node.js MVC -kehykset alkavat yksinkertaisesti ja antavat sinun lisätä komponentteja tarpeen mukaan. Monet Sinatran kaltaisista Node.js MVC-kehyksistä arvostavat itse asiassa kokoonpanoa, joten näiden ja Railsin kaltaisten kehysten välinen rata ei ole aina selvä.

Liittyvä video: Node.js-vinkkejä ja vihjeitä

Opi tässä selitysvideossa useita tekniikoita, jotka voivat parantaa Node-kehityskokemustasi.

Sinatran kaltaiset MVC-kehykset Node.js: lle

Ruokavalio

Diet laskuttaa itsensä pienenä modulaarisena Node.js-verkkokehyksenä, joka on hyvä nopeiden, skaalautuvien sovellusten ja sovellusliittymien tekemiseen. Basic Diet -palvelin näyttää paljon kuin Express Express -palvelin:

// Luo sovellus

var server = vaatia (‘ruokavalio’)

var app = palvelin ()

app.listen (’// paikallinen isäntä: 8000’)

// Kun // localhost: 8000 / pyydetään, vastaa "Hello World!"

app.get (’/’, funktio ($) {

$ .end (’Hei maailma!’)

  })

Dietilla on rakenne, joka tukee virtuaalista isännöintiä ilman lisämoduuleja tai kokoonpanoa. Diet-palvelin-esiintymät toimivat virtuaalisina isäntinä. Pyydä heitä vain kuuntelemaan eri satamissa.

Ruokavalion reititys ei vain käsittele tiettyjä polkuja nimettömillä toiminnoilla, kuten app.get () yllä olevassa esimerkissä, mutta voi myös muodostaa välilevyn:

// Rekisteröi väliohjelmatoiminnot lähetyspolulle

app.post (‘/ upload / picture’, lataa, rajaa, tallenna, lopeta)

Node.js: llä on oletusarvoisesti kaksi argumenttia, pyyntö ja vastaus, kun luot HTTP-palvelimia palvelimella http.createServer (). Diet yhdistää nämä kaksi kohdetta yhdeksi signaalikohteeksi, jota edustaa dollarin merkki $. Voit nähdä app.get () näyte yllä, että signaaliobjekti on argumentti käsiteltävälle toiminnolle saada pyynnöt juuripolulla. Diet tukee myös Node.js-moduuleja ja voi käyttää niitä väliohjelmana, kuten app.post () esimerkki yllä.

Ilmaista

Express on minimaalinen ja joustava Node.js-verkkosovelluskehys, joka tarjoaa vankan joukon ominaisuuksia yhden, monisivuisten ja hybridisovellusten rakentamiseen. Express-sovellusliittymä käsittelee verkkosovellusta, HTTP-pyyntöjä ja vastauksia, reititystä ja väliohjelmistoja. Express 4.x: stä lähtien tuettu Expressin väliohjelmisto sijaitsee useissa erillisissä arkistoissa, jotka on lueteltu Connect-repossa.

Useita Expressin haarukoita ja lisäosia on tullut esiin, mukaan lukien veturi, Hapi ja Koa. Koa luotiin yksi Expressin tärkeimmistä avustajista.

Vaikka Express on vanhempi ja sen jalanjälki on suurempi kuin siemenensä, sillä on silti suurempi yhteisö ja enemmän vakautta kuin mikään niistä. Näen, että Express liitetään jatkuvasti muihin kehyksiin ja työkaluihin ilman kommentteja, ikään kuin se olisi ainoa mahdollinen valinta verkkopalvelimen rakentamiseen Node.js: lle.

// luo pikasovellus

const express = vaatia (’express’)

const app = express ()

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

res.send (’Hei maailma!’)

})

app.listen (3000, function () {

console.log (’Esimerkki sovelluksen kuuntelusta portissa 3000!)

})

Flatiron

Flatiron on osa Nodejitsu Node -työkalupakettia. Kirjoittajat pitävät Flatironia kahtena asiana: Ensinnäkin aloite rakentaa tuotannosta irrotetut työkalut, joilla on korkea laatu ja suorituskyky. Toiseksi, täyden pinon verkkosovelluskehys, joka pakkaa nämä työkalut yhteen isomorfisen ja suorapohjaisen sovelluskehityksen helpottamiseksi.

Flatiron on Sinatran kaltainen siinä mielessä, että sinun tarvitsee vain käyttää sitä verkkopalvelimena vaatia se, suorita sovellus ja käytä http-laajennuksia, määritä joitain reittejä ja käynnistä sovellus, kuten alla olevassa kuvakaappauksessa näkyy.

Muut sviitin osat täydentävät silitysraudan toiminnallisuutta. Esimerkiksi Broadway paljastaa yksinkertaisen "plugin" -sovellusliittymän, joka korvaa muiden solmujen MVC-kehysten käyttämän ohjauksen rekisteröinnin inversion. Union on hybridipuskuroitu / suoratoistettava väliohjelman ydin, joka on taaksepäin yhteensopiva Connectin kanssa. Union on pala, joka toimittaa http-laajennuksen.

// luo flatiron-sovellus

var flatiron = vaatia (’flatiron’),

app = flatiron.app;

app.use (flatiron.plugins.http);

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

this.res.writeHead (200, {’Content-Type’: ’teksti / tavallinen’});

this.res.end (’Hei maailma! \ n’);

});

app.start (8080);

Hapi

Hapi on helppokäyttöinen, määrityskeskeinen kehys, jossa on sisäänrakennettu tuki tulojen validointiin, välimuistiin tallentamiseen, todennukseen ja muihin olennaisiin palveluihin verkko- ja palvelusovellusten rakentamiseksi. Hapi antaa kehittäjille mahdollisuuden keskittyä uudelleenkäytettävän sovelluslogiikan kirjoittamiseen erittäin modulaarisen ja ohjeellisen lähestymistavan avulla. Hapi on Walmart Labsin kehittämä, ja se on hyvä valinta suurille ryhmille ja suurille projekteille.

Hapi rakennettiin alun perin Expressin päälle, mutta myöhemmin se suunniteltiin itsenäiseksi. Kuten sen luojat sanoivat, Hapi rakennettiin ajatuksella, että kokoonpano on parempi kuin koodi ja että liiketoimintalogiikka on eristettävä siirtokerroksesta. Huomaa alla olevassa esimerkissä, kuinka selkeä ja puhdas palvelinreittien kokoonpano näkyy koodissa.

// luo hapi-palvelin

var Hapi = vaatia (’hapi’);

var-palvelin = uusi Hapi.Server (3000);

server.route ([

  {

menetelmä: ”GET”,

polku: ’/ api / items’,

käsittelijä: toiminto (pyyntö, vastaus) {

vastaus (”Hae kohteen tunnus”);

    }

  },

  {

menetelmä: ”GET”,

polku: ’/ api / items / {id}’,

käsittelijä: toiminto (pyyntö, vastaus) {

vastaus (’Hae kohteen tunnus:’ + request.params.id);

    }

  },

Koa

Koa on uudempi verkkokehys, jonka on suunnitellut Expressin takana oleva tiimi, mutta riippumaton Express-koodista. Koa pyrkii olemaan pienempi, ilmeikkäämpi ja vankempi perusta verkkosovelluksille ja sovellusliittymille. Koa käyttää ES6-generaattoreita väliohjelmistoihin Node.js-soittojen sijaan. Seuraava on “Hello, World” Koa -sovellus, joka käyttää generaattoria, joka tekee a tuotto seuraavaksi siirtää ohjaus seuraavalle generaattorille:

var koa = vaatia (’koa’);

var app = koa ();

// x-vasteaika

app.use (funktio * (seuraava) {

var start = uusi päivämäärä;

tuotto seuraavaksi;

var ms = uusi päivämäärä - alku;

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

});

// vastaus

app.use (funktio * () {

this.body = ’Hei maailma’;

});

app. kuuntele (3000);

Koa käyttää väliohjelmistogeneraattoreita ja Expressin ja Connectin käyttämiä soittopyyntöjä. Connectin toteutus yksinkertaisesti ohjaa hallintaa toimintosarjojen kautta, kunnes yksi palaa, kun taas Koa antaa "alavirran", sitten ohjaus virtaa takaisin "ylävirtaan".

Yllä olevassa esimerkissä x-vasteaika “kietoo” vastausgeneraattorin tuotto seuraavaksi lausunto, joka merkitsee puhelun. Tuotto on joustavampaa kuin eksplisiittiset toimintopyynnöt, koska sen avulla on helppo lisätä toinen generaattori sekvenssiin, esimerkiksi verkkoloki ajastimen ja vastauksen välille.

Veturi

Locomotive on Node.js: n verkkokehys, joka tukee MVC-malleja, RESTful-reittejä ja käytäntöjä kokoonpanon suhteen (kuten Rails) integroitumalla saumattomasti mihin tahansa tietokantaan ja mallimoottoriin. Veturi perustuu Express- ja Connect-malleihin.

Veturi lisää Expressiin jonkin verran Ruby-on-Rails-tyyppinen rakenne, joka näkyy alla olevassa kuvassa. Veturinäkymät ovat usein upotettuja JavaScript (html.ejs) -tiedostoja, kuten tässä on esitetty, mutta veturi tukee myös Jadea ja muita yhteensopivia Express-mallimoottoreita. REST-toimintoa ohjaavat reitit, kuten yleensä tapahtuu Express-pohjaisissa palvelimissa. Voit käyttää mitä tahansa tietokantaa ja ORM-tasoa Locomotiven kanssa. Opas osoittaa MongoDB: n käyttämisen Mongooseen sekä Passportin käytön käyttäjän todennuksessa.

Total.js

Total.js on Node.js: n täysin varusteltu palvelinpuolen kehys, joka on kirjoitettu puhtaana JavaScript-muodossa, samanlainen kuin PHP: n Laravel tai Python's Django. Total.js-alusta on kokoelma kirjastoja, paketteja ja valmiita tuotteita, jotka on rakennettu Total.js: n avulla.

Total.js on enemmän Sinatra- kuin Rails-tyyppinen, koska se on modulaarinen ja koska se on agnostinen IDE: itä, tietokantoja ja asiakaspuolen kehyksiä kohtaan. Pienin Total.js-verkkopalvelin voidaan toteuttaa seuraavalla koodilla:

vaatia (’total.js’);

F.reitti (’/’, funktio () {

this.plain (’total.js on todella hyvä!’);

});

F.http (’virheenkorjaus’);

Liittyvä video: Node.js-vinkkejä ja vihjeitä

Kiskojen kaltaiset MVC-kehykset Node.js: lle

Adonis

Adonis on Node.js: n MVC-kehys, joka on rakennettu käytännön käyttötapausten ympärille. Se tukee riippuvuusinjektioita ja siinä on laiha IoC (inversion of control) -säiliö, joka auttaa sinua ratkaisemaan ja pilkkaamaan riippuvuuksia. Adonis tarjoaa CLI-työkalun kaikkien tarvittavien riippuvuuksien sisältävän projektin rakentamiseen ja luomiseen.

Adonis-ominaisuuden joukossa ovat ORM (Lucid) ja aktiivisen levyn suunnittelumallin toteutus; todennuskerros, joka sisältää istunnot, JWT: n, perustodennuksen ja henkilökohtaiset API-tunnukset; ja ohjainten toteutus ES2015-luokkina. ES2015-generaattorit eliminoivat vanhemmissa JavaScripteissä yleiset sotkuiset soittopyynnöt. Seuraava koodi hakee kaikki käyttäjät tietokannasta ja palauttaa heidät JSON-muodossa:

const Reitti = käyttö (’Reitti’)

const Käyttäjä = use (’Sovellus / Malli / Käyttäjä’)

Route.get (’/’, funktio * (pyyntö, vastaus) {

const käyttäjät = tuotto User.all ()

response.json (käyttäjät)

})

YhdisteJS

CompoundJS: n takana oleva kaava on Express + rakenne + laajennukset. Tässä rakenne on hakemistojen vakioasettelu, ja laajennukset ovat Node.js-moduuleja, jotka lisäävät toiminnallisuutta kehykseen. Tavoitteena on tarjota selkeä ja hyvin järjestetty käyttöliittymä Express-yhteensopivien sovellusten kehittämiseen. Tämä tarkoittaa, että kaikki, mikä toimii Expressin kanssa, toimii myös CompoundJS: n kanssa.

Voit luoda luuranko CompoundJS -sovelluksia CLI: stä:

npm asenna yhdiste -g

yhdiste init todo-list-app

cd todo-list-app && npm install

solmu.

Sivusto kuuntelee oletusarvoisesti // localhost: 3000 /. Voit jatkaa telineiden lisäämistä malleihin, joissa on Yhdiste muodostaa telineen komento.

Geddy

Geddy-kehys toteuttaa Node.js: n MVC: n erittäin Rails-tyyppisellä tavalla, jopa hakemistorakenteeseen asti, kykyyn avata REPL-konsoli sovelluksen yhteydessä ja generaattoriskriptiin, jonka avulla voit luoda sovelluksia, resursseja telineet tai paljaat mallit ja ohjaimet. Rakennustelineet voivat valinnaisesti luoda EJS-, Jade-, ohjaustanko-, viikset- ja Swig-malleja.

geddy jake komento voi suorittaa useita Jake (JavaScript tehdä) tehtävät nykyisen sovelluksen yhteydessä, kaikilla malleilla. Tästä on hyötyä aputehtävissä, kuten testauksessa, kehitystietokannan alustuksessa ja reittien luetteloinnissa.

Kraken

Kraken, PayPalin avoimen lähdekoodin projekti, on turvallinen ja skaalautuva kerros, joka laajentaa Expressia tarjoamalla rakennetta ja käytäntöjä, aivan kuten Locomotiven. Vaikka Kraken on sen kehyksen pääpilari, seuraavia moduuleja voidaan käyttää myös itsenäisesti: Lusca (turvallisuus), Kappa (NPM-välityspalvelin), Makara (LinkedIn Dust.js i18N) ja Adaro (LinkedIn Dust.js -mallinnus).