Ich habe gerade angefangen, Express 4.0 in meiner Node.js-App kennenzulernen, und festgestellt, dass eine ./bin/www
Datei generiert wurde , auf der nur die Einstellungen für den Anwendungsserver und den Port geschrieben sind und alles andere wie Middleware und Routing in der ./app.js
Datei definiert ist.
Ich bin mir jedoch nicht sicher, was dies ./bin/www
bewirkt. Ich habe Express 3.x verwendet und immer Server- und Porteinstellungen sowie Routing und Middleware für die identische ./app.js
Datei definiert und meine Knoten-App mit gestartet node app.js
. Was bringt es also, das zu verwenden ./bin/www
? Trennt es nur die Server- und Portdefinition von anderen?
Wenn ich das Paket jetzt mit dem Express-Generator erstelle, package.json
enthält es die folgende Definition:
"scripts": {
"start": "node ./bin/www"
}
Ich frage mich jedoch, ob ich meine App mit node ./bin/www
oder starten soll npm start
. Welchen Befehl soll ich ausführen, um meine App zu starten?
Und was soll ich in die Procfile
Datei schreiben, wenn ich meine App für Heroku bereitstelle ? Ist web: node app.js
genug
quelle
Antworten:
In Express 3.0 verwenden Sie normalerweise
app.configure()
(oderapp.use()
), um die erforderliche Middleware einzurichten, die Sie benötigen. Die von Ihnen angegebene Middleware wird zusammen mit Express 3.0 gebündelt.Beispiel:
In Express 4.0 wurden jedoch alle Middleware-Programme entfernt, damit sie unabhängig vom Core Express (mit Ausnahme der statischen Middleware) gewartet und aktualisiert werden können. Daher müssen sie separat aufgerufen werden (wie in
app.js
).Das
bin/
Verzeichnis dient als Speicherort, an dem Sie Ihre verschiedenen Startskripte definieren können . Dieswww
ist ein Beispiel zum Starten der Express-App als Webserver.Letztendlich könnten Sie verschiedene Skripte wie
test
,stop
oderrestart
usw. haben. Mit dieser Struktur können Sie verschiedene Startkonfigurationen haben, ohne alles zu stopfenapp.js
.Der richtige Weg, um Ihre Express-App zu starten, ist:
Fügen Sie Folgendes hinzu , um eine Express 4.x- App für Heroku bereitzustellen
Procfile
:Oder wenn Sie nur das
package.json
Startskript in Ihrem verwenden können , verwendet Heroku das automatisch. Lesen Sie hier mehrquelle
www
. Ich bin mir nicht sicher, warum es so heißt - vielleicht nach dem World Wide Web benannt?Knoten-Apps wie Express 3.x verwenden nicht standardmäßige Startdateien
app.js
, aber es ist die falsche Datei, die ausgeführt werden soll.package.json
hatHier wird die Startbefehlszeile angegeben. Es ist nicht trivial, da dies möglicherweise eine vollständige Befehlszeile enthält und nicht nur einen Pfad zur Starterdatei.
quelle
Wenn Sie den Express-Generator verwenden, schauen Sie sich einfach Ihre lokale Datei an. In der ./bin
./bin
befindet sich einewww
Datei. Wenn Sie also ausführennode ./bin/www
, führt node.js den Code in derwww
Datei aus. Nichts Besonderes.quelle
Verwenden Sie unter Windows diesen Befehl:
quelle
Alle oben genannten haben gut geantwortet. Aber für den Fall, dass Sie
node app.js
nur wie Express 3. * Versionen verwenden möchten . Sie können unten folgen:Da die vom Express 4-Generator generierte Datei app.js jetzt ein Node.js-Modul ist , kann sie nicht mehr unabhängig als App gestartet werden (es sei denn, Sie ändern den Code). Das Modul muss in eine Node.js-Datei geladen und über die Node.js-Datei gestartet werden. Die Node.js-Datei lautet in diesem Fall ./bin/www. Weitere Informationen finden Sie in der offiziellen Dokumentation .
Weder das bin-Verzeichnis noch die erweiterungslose www-Datei sind zum Erstellen einer Express-App oder zum Starten der App obligatorisch. Es handelt sich lediglich um Vorschläge des Generators. Sie können sie also jederzeit an Ihre Bedürfnisse anpassen.
Löschen Sie die Zeile mit der Aufschrift module.exports = app; Fügen Sie am Ende der Datei app.js an ihrer Stelle den folgenden Code ein:
Ändern Sie
"start": "node ./bin/www"
als Nächstes die Datei package.json . Seitdem haben Sie die Funktionalität von ./bin/www wieder auf app.js verschoben. Beginnen Sie jetzt mit der"start": "node app.js"
Ausführung Ihrer Express-App.quelle
Legen
web: node ./bin/www
Sie dies in Procfile und prüfen Sie, ob es funktioniertforeman start
. Die App sollte auf Port 5000 verfügbar seinquelle