Nonostante conosca abbastanza bene JavaScript, sono confuso su cosa fanno esattamente questi tre progetti nell'ecosistema Node.js. È qualcosa come il rack di Rails? Qualcuno può spiegare per favore?
Nonostante conosca abbastanza bene JavaScript, sono confuso su cosa fanno esattamente questi tre progetti nell'ecosistema Node.js. È qualcosa come il rack di Rails? Qualcuno può spiegare per favore?
Risposte:
[ Aggiornamento: dalla sua versione 4.0, Express non utilizza più Connect. Tuttavia, Express è ancora compatibile con il middleware scritto per Connect. La mia risposta originale è sotto.]
Sono contento che tu l'abbia chiesto, perché è sicuramente un punto di confusione comune per le persone che guardano Node.js. Ecco il mio colpo migliore per spiegarlo:
Node.js stesso offre un modulo http , il cui createServer
metodo restituisce un oggetto che è possibile utilizzare per rispondere alle richieste HTTP. Tale oggetto eredita il http.Server
prototipo.
Connect offre anche un createServer
metodo, che restituisce un oggetto che eredita una versione estesa di http.Server
. Le estensioni di Connect sono principalmente disponibili per semplificare il collegamento del middleware . Ecco perché Connect si definisce un "framework middleware" ed è spesso analizzato al Rack di Ruby.
Express fa a Connect ciò che Connect fa al modulo http: offre un createServer
metodo che estende il Server
prototipo di Connect . Quindi tutte le funzionalità di Connect sono lì, oltre a visualizzare il rendering e un pratico DSL per la descrizione dei percorsi. Il Sinatra di Ruby è una buona analogia.
Poi ci sono altri framework che vanno ancora oltre ed estendono Express! Zappa , ad esempio, che integra il supporto per CoffeeScript, jQuery sul lato server e test.
Ecco un esempio concreto di cosa si intende per "middleware": pronto all'uso, nessuno dei precedenti offre file statici per te. Ma basta inserire connect.static
(un middleware fornito con Connect), configurato per puntare a una directory e il tuo server fornirà l'accesso ai file in quella directory. Si noti che Express fornisce anche i middleware di Connect; express.static
è lo stesso di connect.static
. (Entrambi erano conosciuti staticProvider
fino a poco tempo fa.)
La mia impressione è che la maggior parte delle app "reali" di Node.js siano state sviluppate con Express in questi giorni; le funzionalità che aggiunge sono estremamente utili e tutte le funzionalità di livello inferiore sono ancora presenti se lo si desidera.
La risposta accettata è davvero vecchia (e ora sbagliata). Ecco le informazioni (con sorgente) basate sulla versione corrente di Connect (3.0) / Express (4.0).
http / https createServer
che accetta semplicemente una richiamata (req, res) ad es
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
Il middleware è fondamentalmente qualsiasi software compreso tra il codice dell'applicazione e alcune API di basso livello. Connect estende la funzionalità integrata del server HTTP e aggiunge un framework di plug-in. I plugin fungono da middleware e quindi connect è un framework di middleware
Il modo in cui lo fa è piuttosto semplice ( e in effetti il codice è davvero breve! ). Non appena chiami var connect = require('connect'); var app = connect();
, ricevi una funzione app
che può:
.use
( sorgente ) per gestire i plugin ( che viene da qui a causa di questa semplice riga di codice ).A causa di 1.) è possibile effettuare le seguenti operazioni:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
Combina con 2.) e otterrai:
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connect fornisce una funzione di utilità con cui registrarsi in http
modo da non dover effettuare la chiamata http.createServer(app)
. Si chiama listen
e il codice crea semplicemente un nuovo server http, si registra come callback e inoltra gli argomenti a http.listen
. Dalla fonte
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Quindi, puoi fare:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
È ancora il tuo buon vecchio http.createServer
con un framework di plugin in cima.
ExpressJS e connect sono progetti paralleli. Connect è solo un framework middleware, con una bella use
funzione. Express non dipende da Connect ( vedi package.json ). Tuttavia fa tutto ciò che si connette fa cioè:
createServer
like connect poiché anche questa è solo una funzione che può accettare una req
/ res
coppia ( sorgente ).listen
funzione di utilità per registrarsi con httpOltre a ciò che offre Connect (che esprime i duplicati), ha un sacco di altre funzionalità. per esempio
La use
funzione di ExpressJS e Connect è compatibile e pertanto il middleware è condiviso . Entrambi sono framework di middleware, express ha più di un semplice framework di middleware .
La mia opinione: siete abbastanza informati ^ in base a quanto sopra ^ da fare la vostra scelta.
http.createServer
se si sta creando qualcosa come connect / expressjs da zero.http.createServer
La maggior parte delle persone dovrebbe semplicemente usare ExpressJS.
Questi potrebbero essere stati veri come alcuni punti nel tempo, ma ora sbagliati:
che eredita una versione estesa di http.Server
Sbagliato. Non lo estende e come hai visto ... lo usa
Express fa per Connect cosa fa Connect al modulo http
Express 4.0 non dipende nemmeno dalla connessione. vedere la sezione delle dipendenze package.json corrente
Node.js è un motore javascript per il lato server.
Oltre a tutte le funzionalità js, include funzionalità di rete (come HTTP) e accesso al file system.
Ciò è diverso dai js lato client in cui le attività di rete sono monopolizzate dal browser e l'accesso al file system è vietato per motivi di sicurezza.
Qualcosa che viene eseguito nel server, comprende HTTP e può accedere ai file suona come un server web. Ma non è uno.
Per fare in modo che node.js si comporti come un server Web, è necessario programmarlo: gestire le richieste HTTP in entrata e fornire le risposte appropriate.
Ecco cosa fa Express: è l'implementazione di un web server in js.
Pertanto, implementare un sito Web è come configurare percorsi Express e programmare le funzionalità specifiche del sito.
La pubblicazione di pagine comporta una serie di attività. Molte di queste attività sono ben note e molto comuni, quindi il modulo Connect di node (uno dei tanti moduli disponibili per l'esecuzione sotto il nodo) implementa tali attività.
Guarda l'offerta impressionante attuale:
Connect è il framework e tramite esso puoi scegliere i (sotto) moduli di cui hai bisogno.
La pagina Contrib Middleware elenca un lungo elenco di middleware aggiuntivi .
Express stesso viene fornito con i middleware Connect più comuni.
Installa node.js.
Il nodo viene fornito con npm , il gestore pacchetti nodo .
Il comando npm install -g express
scaricherà e installerà express a livello globale (consultare la guida express ).
L'esecuzione express foo
in una riga di comando (non nel nodo) creerà un'applicazione pronta per l'esecuzione denominata pippo. Passare alla sua directory (appena creata) ed eseguirlo con il nodo con il comando node <appname>
, quindi aprire http://localhost:3000
e vedere. Ora sei dentro.
Node.js
stesso offre un modulo HTTP, il cui metodo createServer restituisce un oggetto che è possibile utilizzare per rispondere alle richieste HTTP. Tale oggetto eredita il http.Server
prototipo.
Informazioni correlate, in particolare se si utilizza NTVS per lavorare con l'IDE di Visual Studio. NTVS aggiunge gli strumenti NodeJS ed Express, i ponteggi, i modelli di progetto a Visual Studio 2012, 2013.
Inoltre, la verbosità che chiama ExpressJS o Connect come "WebServer" non è corretta. È possibile creare un WebServer di base con o senza di essi. Un programma di base NodeJS può anche utilizzare il modulo http per gestire le richieste http, diventando così un server web rudimentale.
middleware come suggerisce il nome, in realtà il middleware si trova tra il middle .. middle of what? mezzo di richiesta e risposta .. come richiesta, risposta, server espresso siedono nell'app express in questa immagine puoi vedere le richieste provenienti dal client, quindi il server del server espresso serve quelle richieste .. quindi consente di scavare più a fondo .. in realtà possiamo dividere questo intero compito di express server in piccole attività separate come in questo modo. come il middleware si colloca tra la richiesta e la risposta piccolo pezzo di parti del server che esegue una determinata attività e ha passato la richiesta al successivo .. finalmente facendo tutte le attività è stata fatta la risposta .. tutto il middleware può accedere all'oggetto richiesta, all'oggetto risposta e alla successiva funzione della richiesta ciclo di risposta ..
questo è un buon esempio per spiegare il middleware nel video express di YouTube per il middleware