wake-up-neo.net

Was macht "./bin/www" in Express 4.x?

Ich habe gerade angefangen, über Express 4.0 in meiner Node.js-App zu lernen, und fand heraus, dass ./bin/www-Datei generiert wurde, in der nur die Anwendungsserver- und Port-Einstellungen geschrieben sind und alles andere, wie Middleware und Routing, in der ./app.js-Datei definiert ist.

Ich bin mir jedoch nicht sicher, was dieser ./bin/www tut. Ich habe Express 3.x verwendet, und ich habe immer Server- und Porteinstellungen sowie Routing und Middleware für die identische ./app.js-Datei definiert und meine Knoten-App mit node app.js gestartet. Wozu also der ./bin/www? Trennt es nur die Server- und Portdefinition von anderen?

Wenn ich das Paket mit dem Express-Generator erstelle, enthält package.json die folgende Definition:

"scripts": {
    "start": "node ./bin/www"
}

Ich frage mich jedoch, ob ich meine App mit node ./bin/www oder npm start starten soll. Welchen Befehl sollte 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?

127
Blaszard

In Express 3.0 würden Sie normalerweise app.configure() (oder app.use()) verwenden, um die benötigte Middleware einzurichten. Die von Ihnen angegebene Middleware ist in Express 3.0 enthalten.

Beispiel:

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.compress());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());

In Express 4.0 wurden jedoch alle Middleware entfernt, sodass sie unabhängig vom Core Express (außer der statischen Middleware) gewartet und aktualisiert werden können. Daher müssen sie separat aufgerufen werden (was Sie in app.js sehen).

Das bin/-Verzeichnis dient als Ort, an dem Sie Ihre verschiedenen Startup-Skripts definieren können , die www ist ein Beispiel dafür, wie es aussehen sollte. Letztendlich könnten Sie Startskripte wie test, stop oder restart usw. haben. Durch diese Struktur können Sie unterschiedliche Konfigurationen haben, ohne den app.js zu berühren.

Die korrekte Art, Ihre Express-App zu starten, ist: 

npm start

Um eine Express 4.x app für Heroku bereitzustellen, fügen Sie dies zu Ihrer Procfile hinzu: 

web: npm start
103
Andy

Knoten-Apps wie Express 3.x verwenden nicht standardmäßige Startdateien app.js, aber es ist die falsche Datei zum Ausführen. 

package.json hat

   "scripts": {
     "start": "node ./bin/www"
   }

die gibt die Startbefehlszeile an. Dies ist nicht trivial, da diese möglicherweise eine vollständige Befehlszeile enthält und nicht nur einen Pfad zur Starter-Datei.

7
4dgaurav

wenn Sie den Express-Generator verwenden, schauen Sie sich nur Ihre lokale Datei ./bin an. In der ./bin befindet sich www-Datei. Wenn Sie node ./bin/www ausführen, führt node.js den Code in der www-Datei aus. Nichts Außergewöhnliches.

1
Max Ma

Verwenden Sie unter Windows diesen Befehl:

set DEBUG = myapp: * & npm start Laden Sie dann http: // localhost: 3000/ in Ihren Browser, um auf die App zuzugreifen.

0
user11059213