Programmering

Den komplette guiden til Node.js-rammeverk

Node.js er en JavaScript-kjøretid, bygget på Chrome V8 JavaScript-motor, som er egnet for implementering av både desktop- og server-apper. Node.js bruker en hendelsesdrevet, ikke-blokkerende I / O-modell som gjør den lett og effektiv i forhold til gjengede servere, som Apache, IIS og din typiske Java-server.

Mens du kan implementere en webserver eller app helt i vanlig Node.js-kode, et rammeverk kan redusere mengden kode du trenger å skrive. I denne veiledningen undersøker vi omfanget av rammer som er tilgjengelige for Node.js-utvikleren.

Vi starter med minimalistiske Sinatra-lignende rammer som Express, går til mer meningsfulle Rails-lignende rammer som Sails.js, deretter videre til full-stack rammer med stillas- og utholdenhetsbiblioteker som Meteor. Til slutt dekker vi REST API-rammer som LoopBack og noen få “andre” biblioteker for formål som faller utenfor våre hovedkategorier (som ORM, IoT og generering av statiske nettsteder).

Merk at klassifiseringene ikke er godt skilt. Det er flere rammer som kan anses å tilhøre flere kategorier.

Merk at det er flere Node.js MVC-prosjekter enn jeg har oppført her. I noen tilfeller eliminerte jeg prosjekter som ikke lenger er aktive. I andre fjernet jeg rammer som aldri tiltrukket betydelig utviklerinteresse til tross for kontinuerlig aktivitet. Målet mitt er ikke å fortelle deg om alle mulige prosjekter, men heller å hjelpe deg med å identifisere prosjekter som kan være verdt evalueringstiden din.

MVC-rammer for Node.js

MVC (model-view-controller) er et paradigme som er ment å partisjonere funksjonaliteten til et skrivebord eller en webapplikasjon. Modellen styrer den underliggende datastrukturen. Visningen styrer det som vises til brukeren. Og kontrolleren styrer det som skjer som svar på brukerforespørsler.

Rails er et fullverdig, "meningsfullt" MVC-basert nettrammeverk opprettet i 2004 av David Heinemeier Hansson (også kalt DHH) for å gi Ruby en måte å etablere en tilstedeværelse på nettet. Rails antar at du bruker en database, verdikonvensjon over konfigurasjon og skalerer godt. Rails-lignende Node.js MVC-rammeverk er de som har full funksjoner.

Sinatra er et lite grunnleggende, mindre meningsfullt MVC-basert web-rammeverk som ble opprettet i 2007 av Blake Mizerany og for tiden vedlikeholdes av Konstantin Haase. Sinatra tok den motsatte tilnærmingen til Rails ved at den bare har det du trenger for en webapplikasjon, i utgangspunktet ruter for å legge appen din på nettet med et DSL (domenespesifikt språk) over et "rack" -lag. Rack er et abstraksjonslag basert på Node.js EventEmitter, og gir en enkel måte å håndtere klyngestøtte på.

De Sinatra-lignende Node.js MVC-rammene er de som begynner enkle og lar deg legge til komponenter etter behov. Mange av de Sinatra-lignende Node.js MVC-rammene gjør faktisk verdikonvensjon over konfigurasjon, så linjen mellom disse og de Rails-lignende rammene er ikke alltid klar.

Relatert video: Node.js tips og triks

I denne forklaringsvideoen kan du lære deg flere teknikker som kan forbedre din Node-utviklingsopplevelse.

Sinatra-lignende MVC-rammer for Node.js

Kosthold

Diet fakturerer seg selv som et lite, modulært Node.js web-rammeverk som er bra for å lage raske, skalerbare apper og APIer. En grunnleggende diett-server ser veldig ut som en grunnleggende Express-server:

// Opprett en app

var server = krever (‘diett’)

var app = server ()

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

// Når // localhost: 8000 / blir bedt om det, svar med “Hello World!”

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

$ .end (‘Hello World!’)

  })

Diet har en struktur som støtter virtuell hosting uten ytterligere moduler eller konfigurasjon. Kostholdsserverinstanser fungerer som virtuelle verter. Bare la dem høre på forskjellige porter.

Routing in Diet håndterer ikke bare spesifikke stier med anonyme funksjoner, som i app.get () eksempelet ovenfor, men kan også etablere en pipeline av mellomvare:

// Registrer mellomvarefunksjoner for opplastingsstien

app.post (‘/ upload / picture’, upload, crop, save, finish)

Node.js har som standard to argumenter, be om og respons, når du oppretter en HTTP (s) server ved hjelp av http.createServer (). Diet kombinerer disse to objektene til et enkelt signalobjekt som er representert med et dollartegn $. Du kan se i app.get () prøve over at signalobjektet er argumentet for funksjonen som håndterer forespørsler på rotveien. Diet støtter også Node.js-moduler og kan bruke dem som mellomvare, som vist i app.post () eksempelet ovenfor.

Uttrykke

Express er et minimalt og fleksibelt rammeverk for Node.js-nettapplikasjoner, og gir et robust sett med funksjoner for å bygge enkelt-, flersides- og hybrid-webapplikasjoner. Express API håndterer nettapplikasjonen, HTTP-forespørsler og svar, ruting og mellomvare. Fra og med Express 4.x ligger den støttede mellomvaren for Express i en rekke separate arkiver, oppført i Connect repo.

Flere gafler av og tilleggsprogrammer for Express har dukket opp, inkludert Locomotive, Hapi og Koa. Koa ble skapt av en av hovedbidragsyterne til Express.

Selv om Express er eldre og har et større fotavtrykk sammenlignet med landets land, har det fortsatt et større samfunn og mer stabilitet enn noen av dem. Jeg ser hele tiden Express innlemmet i andre rammer og verktøy uten kommentarer, som om det var det eneste mulige valget for å bygge en webserver på Node.js.

// lage en ekspressapplikasjon

const express = krever (‘express’)

const app = express ()

app.get (‘/‘, funksjon (req, res) {

res.send (‘Hallo verden!’)

})

app.listen (3000, funksjon () {

console.log (‘Eksempel på applytting på port 3000!)

})

Flatjern

Flatiron er en del av verktøypakken Nodejitsu Node. Forfatterne anser Flatiron for å være to ting: For det første et initiativ for å bygge en samling av frakoblede verktøy med høy kvalitet og ytelse. Og for det andre et full-stack rammeverk for utvikling av webapplikasjoner som pakker disse verktøyene sammen for å gjøre isomorf og strømbasert applikasjonsutvikling enklere.

Flatiron er Sinatra-aktig ved at alt du trenger å gjøre for å bruke det som en webserver er å krever Installer en app, og bruk http-pluginene, sett opp noen ruter og start appen, som vist på skjermbildet nedenfor.

Andre deler av suiten utfyller flatirons funksjonalitet. For eksempel viser Broadway en enkel “plugin” API, som erstatter inversjonen av kontrollregistrering som brukes av andre Node MVC-rammer. Union er en hybridbuffert / streaming mellomvarekjerne, som er bakoverkompatibel med Connect. Union er brikken som leverer http-plugin.

// lage et flatiron-program

var flatiron = krever (‘flatiron’),

app = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get (‘/‘, funksjon () {

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

this.res.end (‘Hallo verden! \ n’);

});

app.start (8080);

Hapi

Hapi er et brukervennlig, konfigurasjons-sentrisk rammeverk med innebygd støtte for inndatavalidering, caching, autentisering og andre viktige fasiliteter for å bygge nett- og tjenesteapplikasjoner. Hapi gjør det mulig for utviklere å fokusere på å skrive gjenbrukbar applikasjonslogikk gjennom en meget modulær og reseptiv tilnærming. Hapi ble utviklet av Walmart Labs og er et godt valg for store team og store prosjekter.

Hapi ble opprinnelig bygget på toppen av Express, men ble senere redesignet for å være frittstående. Som skaperne uttrykte det, ble Hapi bygget med ideen om at konfigurasjon er bedre enn kode, og at forretningslogikken må isoleres fra transportlaget. I eksemplet nedenfor, legg merke til hvor tydelig og ren konfigurasjonen av serverruter vises i koden.

// opprette en hapi-server

var Hapi = krever (‘hapi’);

var server = ny Hapi.Server (3000);

server.route ([

  {

metode: ‘GET’,

sti: ‘/ api / items’,

handler: funksjon (forespørsel, svar) {

svar (‘Få vare-id’);

    }

  },

  {

metode: ‘GET’,

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

handler: funksjon (forespørsel, svar) {

svar (‘Få vare-id:’ + forespørsel.params.id);

    }

  },

Koa

Koa er et nyere web-rammeverk designet av teamet bak Express, men uavhengig av Express-koden. Koa har som mål å være et mindre, mer uttrykksfullt og mer robust fundament for webapplikasjoner og APIer. Koa bruker ES6-generatorer for mellomvare i stedet for Node.js tilbakeringing. Følgende er et "Hello, World" Koa-program som bruker en generator, som gjør en gi neste for å overføre kontrollen til neste generator:

var koa = krever (‘koa’);

var app = koa ();

// x-responstid

app.use (funksjon * (neste) {

var start = ny dato;

gi neste;

var ms = ny dato - start;

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

});

// respons

app.use (funksjon * () {

this.body = ‘Hello World’;

});

app.listen (3000);

Det er en forskjell mellom mellomvaregeneratorer som brukes av Koa og tilbakeringinger som brukes av Express og Connect. Connect implementering overfører rett og slett kontrollen gjennom en rekke funksjoner til en kommer tilbake, mens Koa gir "nedstrøms", og deretter flyter kontrollen tilbake "oppstrøms."

I eksemplet ovenfor "bryter" x-responstiden responsgeneratoren med gi neste uttalelse som markerer samtalen. Avkastning er mer fleksibel enn eksplisitte funksjonsanrop, da det gjør det enkelt å sette inn en annen generator i sekvensen, for eksempel en nettlogger mellom tidtakeren og responsen.

Lokomotiv

Locomotive er et nettrammeverk for Node.js som støtter MVC-mønstre, RESTful ruter og konvensjon over konfigurasjon (som Rails), mens den integreres sømløst med hvilken som helst database og malmotor. Lokomotiv bygger på Express og Connect.

Lokomotiv legger til Express noen Ruby-on-Rails-lignende struktur, som du kan se på bildet nedenfor. Lokomotivvisninger er ofte innebygde JavaScript-filer (html.ejs), som vist her, men Lokomotiv støtter også Jade og de andre kompatible malmotorene for Express. REST-funksjonaliteten styres av ruter, som det vanligvis er tilfelle i Express-baserte servere. Du kan bruke hvilken database og ORM-lag du vil med Locomotive. Guiden demonstrerer bruk av MongoDB med Mongoose, samt bruk av Passport for brukerautentisering.

Total.js

Total.js er et fullverdig rammeverk på serversiden for Node.js, skrevet i ren JavaScript, i likhet med PHPs Laravel eller Pythons Django. Total.js-plattformen er en samling biblioteker, pakker og fullførte produkter bygget med Total.js.

Total.js er mer Sinatra-aktig enn Rails-aktig fordi det er modulært, og fordi det er agnostisk om IDE-er, databaser og rammeverk på klientsiden. En minimal Total.js-webserver kan implementeres med følgende kode:

krever (‘total.js’);

F.route (‘/’, funksjon () {

this.plain (‘total.js er veldig bra!’);

});

F.http (‘feilsøking’);

Relatert video: Node.js tips og triks

Skinnelignende MVC-rammer for Node.js

Adonis

Adonis er et MVC-rammeverk for Node.js bygget rundt praktiske brukssaker. Den støtter avhengighetsinjeksjon og har en mager IoC-beholder (inversjon av kontroll) som hjelper deg med å løse og spotte avhengigheter. Adonis tilbyr et CLI-verktøy for å stillas og generere et prosjekt med alle nødvendige avhengigheter.

Blant funksjonene til Adonis er en ORM (Lucid) ans implementering av det aktive mønsteret for rekorddesign; et autentiseringslag samlet med økter, JWT, grunnleggende autentisering og personlige API-tokens; og en implementering av kontrollere som ES2015-klasser. ES2015-generatorer eliminerer de rotete tilbakeringingene som er vanlige i eldre JavaScript. Følgende kode henter alle brukerne fra databasen og returnerer dem som JSON:

const Route = bruk (‘Route’)

const User = bruk (‘App / Model / User’)

Route.get (‘/’, funksjon * (forespørsel, svar) {

const brukere = gir User.all ()

response.json (brukere)

})

CompoundJS

Formelen bak CompoundJS er Express + struktur + utvidelser. Her er strukturen standardoppsettet for kataloger, og utvidelser er Node.js-moduler som legger til funksjonalitet i rammeverket. Målet er å gi et åpenbart og godt organisert grensesnitt for Express-kompatibel applikasjonsutvikling. Dette betyr at alt som fungerer med Express, vil fungere med CompoundJS.

Du kan generere skjelett CompoundJS-apper fra CLI:

npm installer sammensatt -g

sammensatt init todo-list-app

cd todo-list-app && npm install

node.

Nettstedet lytter til // localhost: 3000 / som standard. Du kan fortsette å legge til stillas basert på modellene med sammensatt genererer stillas kommando.

Geddy

Geddy-rammeverket implementerer MVC for Node.js på en ekstremt Rails-lignende måte, helt ned til katalogstrukturen, muligheten til å åpne en REPL-konsoll i sammenheng med appen, og et generatorskript du kan bruke til å lage apper, ressurser stillas, eller bare modeller og kontrollere. Stillaset kan valgfritt generere EJS-, Jade-, håndtak, bart og Swig-maler.

De geddy jake kommandoen kan kjøre forskjellige Jake (JavaScript gjøre) oppgaver i sammenheng med den nåværende appen, med full tilgang til modellene. Dette er nyttig for tilleggsoppgaver som testing, initialisering av utviklingsdatabasen og oppføring av ruter.

Kraken

Kraken, et PayPal-kildekodeprosjekt, er et sikkert og skalerbart lag som utvider Express ved å tilby struktur og konvensjon, akkurat som Locomotive. Selv om Kraken er hovedpilaren i rammeverket, kan følgende moduler også brukes uavhengig: Lusca (sikkerhet), Kappa (NPM Proxy), Makara (LinkedIn Dust.js i18N) og Adaro (LinkedIn Dust.js Templating).

$config[zx-auto] not found$config[zx-overlay] not found