Ich versuche herauszufinden, wie eine Instanz von Express heruntergefahren werden kann. Grundsätzlich möchte ich die Umkehrung des .listen(port)
Anrufs - wie kann ich einen Express-Server dazu bringen, das Abhören zu stoppen, den Port freizugeben und sauber herunterzufahren?
Ich weiß, dass dies eine seltsame Frage zu sein scheint. Hier ist der Kontext. Vielleicht gibt es einen anderen Weg, dies zu erreichen, und ich denke falsch darüber nach. Ich versuche, ein Testframework für meine socket.io/nodejs-App einzurichten. Es ist eine einseitige App, also in meinen Testskripten (ich verwende MochaIch möchte in der Lage sein, den Server zu starten, Tests dagegen durchzuführen und dann den Server herunterzufahren. Ich kann dies umgehen, indem ich davon ausgehe, dass entweder der Server vor dem Start des Tests eingeschaltet ist oder dass einer der Tests den Server startet und jeder nachfolgende Test davon ausgeht, dass er aktiv ist, aber das ist wirklich chaotisch. Ich würde es sehr bevorzugen, wenn jede Testdatei eine Serverinstanz mit den entsprechenden Einstellungen startet und diese Instanz dann herunterfährt, wenn die Tests beendet sind. Das heißt, es gibt keine seltsamen Abhängigkeiten beim Ausführen des Tests und alles ist sauber. Es bedeutet auch, dass ich Start- / Abschalttests durchführen kann.
Also, irgendwelche Ratschläge, wie das geht? Ich habe darüber nachgedacht, Ausnahmen manuell auszulösen, um sie zu beenden, aber das scheint chaotisch. Ich habe Express-Dokumente und -Quelle durchsucht, kann aber anscheinend keine Methode finden, mit der der Server heruntergefahren werden kann. Es könnte auch etwas in socket.io dafür geben, aber da der Socket-Server nur an den Express-Server angeschlossen ist, denke ich, dass dies auf der Express-Ebene geschehen muss.
server.close()
wenn Sie dies aus einem Hook heraus aufrufen.Verwenden Sie
app.close()
. Vollständiges Beispiel:Rufen Sie
app.close()
innerhalb des Rückrufs an, wenn die Tests beendet wurden. Denken Sie jedoch daran, dass der Prozess noch ausgeführt wird (obwohl er nicht mehr zuhört).Wenn Sie danach den Vorgang beenden müssen, rufen Sie an
process.exit(0)
.Links:
app.close: http://nodejs.org/docs/latest/api/http.html#server.close (Gleiches gilt für)
process.exit: http://nodejs.org/docs/latest/api/process.html#process.exit
quelle
Ich habe eine Variation von "Wie man einen HTTP-Server beendet" viele Male auf verschiedenen beantwortet node.jsUnterstützungskanäle. Leider konnte ich keine der vorhandenen Bibliotheken empfehlen, da sie auf die eine oder andere Weise fehlen . Ich habe seitdem ein Paket zusammengestellt, das (glaube ich) alle Fälle behandelt, die von einer ordnungsgemäßen Beendigung des HTTP-Servers erwartet werden.
https://github.com/gajus/http-terminator
Der Hauptvorteil von http-terminator ist, dass:
Verwendung mit Express.js:
quelle
quelle
Sie können dies einfach tun, indem Sie ein Bash-Skript schreiben, um den Server zu starten, die Tests auszuführen und den Server zu stoppen. Dies hat den Vorteil, dass Sie einen Alias für dieses Skript erstellen können, um alle Ihre Tests schnell und einfach auszuführen.
Ich verwende solche Skripte für meinen gesamten kontinuierlichen Bereitstellungsprozess. Sie sollten sich Jon Rohans Dead Simple Git Workflow ansehen, um einen Einblick zu erhalten.
quelle