Programmering

Den komplette guide til Node.js-rammer

Node.js er en JavaScript-runtime, der er bygget på Chromes V8 JavaScript-motor, der er velegnet til implementering af både desktop- og serverapps. Node.js bruger en hændelsesdrevet, ikke-blokerende I / O-model, der gør den let og effektiv sammenlignet med gevindservere, såsom Apache, IIS og din typiske Java-server.

Mens du kan implementere en webserver eller app helt i almindelig Node.js-kode, en ramme kan i høj grad reducere den mængde kode, du har brug for at skrive. I denne vejledning undersøger vi omfanget af rammer, der er tilgængelige for Node.js-udvikleren.

Vi starter med minimalistiske Sinatra-lignende rammer som Express, flytter til mere meningsfulde Rails-lignende rammer som Sails.js og derefter videre til full-stack rammer med stilladser og persistensbiblioteker som f.eks. Endelig dækker vi REST API-rammer som LoopBack og et par "andre" biblioteker til formål, der falder uden for vores hovedkategorier (som ORM, IoT og generering af statisk sted).

Bemærk, at klassifikationerne ikke er adskilt godt. Der er flere rammer, der kan betragtes som tilhørende flere kategorier.

Bemærk, at der er flere Node.js MVC-projekter, end jeg har angivet her. I nogle tilfælde eliminerede jeg projekter, der ikke længere er aktive. I andre fjernede jeg rammer, der aldrig tiltrak betydelig udviklerinteresse på trods af kontinuerlig aktivitet. Mit mål er ikke at fortælle dig om alle mulige projekter, men snarere at hjælpe dig med at identificere projekter, der kan være værd at evaluere dig.

MVC-rammer til Node.js

MVC (model-view-controller) er et paradigme beregnet til at opdele funktionaliteten af ​​en desktop eller webapplikation rent. Modellen styrer den underliggende datastruktur. Visningen styrer det, der vises til brugeren. Og controlleren administrerer, hvad der sker som svar på brugeranmodninger.

Rails er en fuldt udstyret, "meningsfuld" MVC-baseret webramme oprettet i 2004 af David Heinemeier Hansson (alias DHH) for at give Ruby en måde at etablere en tilstedeværelse på nettet. Rails antager, at du bruger en database, værdikonvention over konfiguration og skalerer godt. De Rails-lignende Node.js MVC-rammer er dem, der er fuldt udstyrede.

Sinatra er en basisk, mindre meningsfuld MVC-baseret webramme, der blev oprettet i 2007 af Blake Mizerany og i øjeblikket vedligeholdes af Konstantin Haase. Sinatra tog den modsatte tilgang af Rails, idet den kun har det, du har brug for til en webapplikation, dybest set ruter til at placere din app på nettet med et DSL (domænespecifikt sprog) over et "rack" -lag. Rack er et abstraktionslag baseret på Node.js EventEmitterog giver en enkel måde at håndtere klyngesupport på.

De Sinatra-lignende Node.js MVC-rammer er dem, der starter enkle og giver dig mulighed for at tilføje komponenter efter behov. Mange af de Sinatra-lignende Node.js MVC-rammer har faktisk værdi for konvention over konfiguration, så linjen mellem disse og de Rails-lignende rammer er ikke altid klar.

Relateret video: Node.js tip og tricks

I denne forklaringsvideo lærer du flere teknikker, der kan forbedre din Node-udviklingsoplevelse.

Sinatra-lignende MVC-rammer til Node.js

Kost

Kost fakturerer sig selv som en lille, modulær Node.js web-ramme, der er god til at lave hurtige, skalerbare apps og API'er. En grundlæggende diæt-server ligner meget en basisk Express-server:

// Opret en app

var server = kræver ('diæt')

var app = server ()

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

// Når // localhost: 8000 / anmodes, svar med “Hello World!”

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

$ .end ('Hello World!')

  })

Kost har en struktur, der understøtter virtuel hosting uden yderligere moduler eller konfiguration. Diætserverforekomster fungerer som virtuelle værter. Bare lad dem lytte i forskellige porte.

Routing in Diet håndterer ikke kun specifikke stier med anonyme funktioner, som i app.get () eksempel ovenfor, men kan også etablere en pipeline af middleware:

// Registrer middleware-funktioner til uploadstien

app.post ('/ upload / billede', upload, beskær, gem, afslut)

Node.js har som standard to argumenter, anmodning og respons, når du opretter en HTTP (s) server ved hjælp af http.createServer (). Kost kombinerer disse to objekter til et enkelt signalobjekt, der er repræsenteret ved et dollartegn $. Du kan se i app.get () prøve over, at signalobjektet er argumentet for den funktion, der håndteres anmodninger på rodstien. Diet understøtter også Node.js-moduler og kan bruge dem som middleware, som vist i app.post () eksemplet ovenfor.

Express

Express er en minimal og fleksibel ramme til Node.js-webapplikationer, der giver et robust sæt funktioner til opbygning af enkelt-, flersides- og hybrid-webapplikationer. Express API beskæftiger sig med webapplikationen, HTTP-anmodninger og svar, routing og middleware. Fra og med Express 4.x ligger den understøttede middleware til Express i et antal separate arkiver, der er angivet i Connect repo.

Flere gafler af og tilføjelser til Express er dukket op, herunder Locomotive, Hapi og Koa. Koa blev oprettet af en af ​​hovedbidragsydere til Express.

Selvom Express er ældre og har et større fodaftryk i forhold til dets scions, har det stadig et større samfund og mere stabilitet end nogen af ​​dem. Jeg ser konstant Express indarbejdet i andre rammer og værktøjer uden kommentarer, som om det var det eneste mulige valg til at opbygge en webserver på Node.js.

// Opret en ekspress applikation

const express = kræve ('udtrykke')

const app = express ()

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

res.send ('Hej verden!')

})

app.listen (3000, funktion () {

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

})

Flatiron

Flatiron er en del af Nodejitsu Node-værktøjspakken. Forfatterne betragter Flatiron som to ting: For det første et initiativ til at opbygge en samling af afkoblede værktøjer med en høj standard for kvalitet og ydeevne. Og for det andet en ramme med fuld stak til webudvikling, der pakker disse værktøjer sammen for at gøre isomorf og strømbaseret applikationsudvikling lettere.

Flatiron er Sinatra-lignende, idet alt hvad du skal gøre for at bruge det som en webserver er at gøre kræve det, instantier en app, og brug http-plugins, opsæt nogle ruter og start appen, som vist på skærmbilledet nedenfor.

Andre dele af suiten supplerer flatirons funktionalitet. For eksempel udsender Broadway et simpelt “plugin” API, der erstatter inversionen af ​​kontrolregistrering, der bruges af andre Node MVC-rammer. Union er en hybridbuffer / streaming middleware-kerne, som er bagudkompatibel med Connect. Union er det stykke, der leverer http-pluginet.

// opret en flatiron-applikation

var flatiron = kræver ('flatiron'),

app = flatiron.app;

app.use (flatiron.plugins.http);

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

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

this.res.end ('Hej verden! \ n');

});

app.start (8080);

Hapi

Hapi er en brugervenlig, konfigurationscentreret ramme med indbygget understøttelse af inputvalidering, caching, godkendelse og andre vigtige faciliteter til opbygning af web- og servicesapplikationer. Hapi gør det muligt for udviklere at fokusere på at skrive genanvendelig applikationslogik gennem en meget modulær og receptpligtig tilgang. Hapi blev udviklet af Walmart Labs og er et godt valg til store teams og store projekter.

Hapi blev oprindeligt bygget oven på Express, men blev senere redesignet til at være enkeltstående. Som dets skabere udtrykte det, blev Hapi bygget med ideen om, at konfiguration er bedre end kode, og at forretningslogik skal isoleres fra transportlaget. I eksemplet nedenfor skal du bemærke, hvordan klar og ren konfigurationen af ​​serverruter vises i koden.

// opret en hapi-server

var Hapi = kræve (‘hapi’);

var server = ny Hapi.Server (3000);

server.route ([

  {

metode: 'FÅ',

sti: '/ api / items',

handler: funktion (anmodning, svar) {

svar ('Hent vare-id');

    }

  },

  {

metode: 'FÅ',

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

handler: funktion (anmodning, svar) {

svar (‘Hent vare-id:’ + anmodning.params.id);

    }

  },

Koa

Koa er en nyere webramme designet af holdet bag Express, men uafhængig af Express-koden. Koa sigter mod at være et mindre, mere udtryksfuldt og mere robust fundament for webapplikationer og API'er. Koa bruger ES6-generatorer til middleware snarere end Node.js callbacks. Følgende er et "Hello, World" Koa-program ved hjælp af en generator, der gør en udbytte næste at overføre kontrol til næste generator:

var koa = kræve (‘koa’);

var app = koa ();

// x-responstid

app.use (funktion * (næste) {

var start = ny dato;

udbytte næste;

var ms = ny dato - start;

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

});

// respons

app.use (funktion * () {

this.body = 'Hello World';

});

app.listen (3000);

Der er en forskel mellem middleware-generatorer, som de bruges af Koa, og callbacks, som de bruges af Express og Connect. Connect's implementering overfører simpelthen kontrol gennem en række funktioner, indtil man vender tilbage, mens Koa giver "nedstrøms", hvorefter kontrol strømmer tilbage "opstrøms."

I eksemplet ovenfor "indpakker" x-responstiden responsgeneratoren med udbytte næste erklæring, der markerer opkaldet. Yielding er mere fleksibel end eksplicitte funktionsopkald, da det gør det let at indsætte en anden generator i sekvensen, for eksempel en weblogger mellem timeren og svaret.

Lokomotiv

Locomotive er en webramme til Node.js, der understøtter MVC-mønstre, RESTful ruter og konvention over konfiguration (som Rails), mens den integreres problemfrit med enhver database og skabelonmotor. Lokomotivet bygger på Express og Connect.

Lokomotiv føjer til Express nogle Ruby-on-Rails-lignende struktur, som du kan se på billedet nedenfor. Lokomotivvisninger er ofte indlejrede JavaScript (html.ejs) filer, som vist her, men Locomotive understøtter også Jade og de andre kompatible skabelonmotorer til Express. REST-funktionaliteten styres af ruter, som det normalt er tilfældet i Express-baserede servere. Du kan bruge den database og det ORM-lag, du gerne vil, med Locomotive. Guiden demonstrerer brug af MongoDB med Mongoose samt brug af Passport til brugergodkendelse.

Total.js

Total.js er en komplet serverramme til Node.js, der er skrevet i ren JavaScript, svarende til PHP's Laravel eller Pythons Django. Total.js-platformen er en samling af biblioteker, pakker og færdige produkter bygget med Total.js.

Total.js er mere Sinatra-lignende end Rails-lignende, fordi det er modulært, og fordi det er agnostisk omkring IDE'er, databaser og klientersider. En minimal Total.js-webserver kan implementeres med følgende kode:

kræve (‘total.js’);

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

this.plain (‘total.js er virkelig god!’);

});

F.http ('debug');

Relateret video: Node.js tip og tricks

Rails-lignende MVC-rammer til Node.js

Adonis

Adonis er en MVC-ramme for Node.js bygget omkring praktiske brugssager. Det understøtter indsprøjtning af afhængighed og har en mager IoC-beholder (inversion af kontrol), der hjælper dig med at løse og spotte afhængigheder. Adonis leverer et CLI-værktøj til stillads og generere et projekt med alle nødvendige afhængigheder.

Blandt funktionerne i Adonis er en ORM (Lucid) ans implementering af det aktive mønster for rekorddesign; et godkendelseslag bundtet med sessioner, JWT, grundlæggende godkendelse og personlige API-tokens; og implementering af controllere som ES2015-klasser. ES2015-generatorer fjerner de rodede tilbagekald, der er almindelige i ældre JavaScript. Den følgende kode henter alle brugerne fra databasen og returnerer dem som JSON:

const Route = brug (‘Rute’)

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

Route.get (‘/’, funktion * (anmodning, svar) {

const brugere = giver User.all ()

response.json (brugere)

})

ForbindelseJS

Formlen bag CompoundJS er Express + struktur + udvidelser. Her er strukturen standardlayoutet for mapper, og udvidelser er Node.js-moduler, der tilføjer funktionalitet til rammen. Målet er at give en åbenbar og velorganiseret grænseflade til Express-kompatibel applikationsudvikling. Dette betyder, at alt, hvad der fungerer med Express, fungerer med CompoundJS.

Du kan generere skelet CompoundJS apps fra CLI:

npm installer sammensatte -g

sammensat init todo-list-app

cd todo-list-app && npm installation

knude.

Webstedet lytter som standard på // localhost: 3000 /. Du kan fortsætte med at tilføje stilladser baseret på modellerne med forbindelse genererer stillads kommando.

Geddy

Geddy-rammen implementerer MVC til Node.js på en ekstremt Rails-lignende måde, selv ned til biblioteksstrukturen, muligheden for at åbne en REPL-konsol i app-sammenhængen og et generator-script, du kan bruge til at oprette apps, ressource stilladser eller bare modeller og controllere. Stilladset kan valgfrit generere EJS, Jade, styr, overskæg og swig skabeloner.

Det geddy jake kommando kan køre forskellige Jake (JavaScript lave) opgaver i forbindelse med den aktuelle app med fuld adgang til modellerne. Dette er nyttigt til supplerende opgaver som test, initialisering af udviklingsdatabasen og notering af ruter.

Kraken

Kraken, et PayPal open source-projekt, er et sikkert og skalerbart lag, der udvider Express ved at tilbyde struktur og konvention, ligesom Locomotive. Selvom Kraken er den vigtigste søjle i sin ramme, kan følgende moduler også bruges uafhængigt: Lusca (sikkerhed), Kappa (NPM Proxy), Makara (LinkedIn Dust.js i18N) og Adaro (LinkedIn Dust.js Templating).