Wie kann ich den Inhalt des Servers aktualisieren, ohne ihn neu zu starten? (node.js)

Core_dumped

Ich habe also einen einfachen node.js-Server, der nur dynamischen Inhalt bereitstellt:

// app.js
var app = require('express')();

app.get('/message/:poster', function(request, response) {
    response.writeHeader(200, {'content-type': 'text/html'});

    // some database queries

    response.end(""+
    "<!DOCTYPE html>"+
    "<html>"+
        "<head>"+
            "<title>messages of "+request.params.poster+"</title>"+
            "<script src='http://example.com/script.js'></script>"+
            "<link rel='stylesheet' href='http://example.com/style.css'>"+
        "</head>"+
        "<body>"+
        "" // and so on
    );
})

app.listen(2345);

Angenommen, ich möchte meinen HTML-Code aktualisieren.
Und nehmen wir weiter an, dass ich den Server nicht neu starten möchte.
Gibt es einen Weg, dies zu erreichen?

Ich habe versucht, das Teil zu exportieren, um es in eine externe Datei zu senden, wie:

// lib.js
module.exports.message = function(request, response) {
    response.writeHeader(200, {'content-type': 'text/html'})

    //some database queries

    response.end(""+
    "<!DOCTYPE html>"+
    "<html>"+
        "<head>"+
            "<title>messages of "+request.params.poster+"</title>"+
            "<script src='http://example.com/script.js></script>"+
            "<link rel='stylesheet' href='http://example.com/style.css'>"+
        "</head>"+
        "<body>"+
        "" //and so on
    );
}

und

// app.js
var app = require('express')();

app.get('/message/:poster', require('./lib.js').message)

app.listen(2345);

Und es funktioniert, aber wenn ich lib.js aktualisiere, wird es nicht aktualisiert. Es scheint eine Kopie dieser Funktion zu machen.
Dann habe ich es versucht

// app.js
var app = require('express')();

app.get('/message/:poster', function(request, response) {
    require('./lib.js').message(request, response);
})

app.listen(2345);

Dies wird jedoch auch nicht aktualisiert.
Scheint, als würde die Funktion die ganze Zeit zwischengespeichert und wiederverwendet (sobald ich den Server starte). Ich wage zu sagen, dass es eine Möglichkeit geben muss, es so einzustellen, dass es entweder die Funktion jedes Mal neu validiert (prüft, ob sich die Datei, die es enthält, geändert hat) und wenn ja, ihren Cache aktualisiert, oder wir können es so einstellen, dass die Funktion jede n Menge aktualisiert wird Zeit oder noch besser, da wir uns im Knoten befinden und einen Ereignis-Listener für Änderungen an den Dateien haben, die die Funktion enthalten. Wenn sich die Funktion ändert, wird ein Ereignis ausgelöst und die Funktion im Cache wird aktualisiert.
Wie bekommen wir eines der oben genannten Verhaltensweisen? Oder etwas anderes? Ich weiß, dass ein Neustart eines Servers möglicherweise nur 100 ms dauert, ein Neustart jedoch alle derzeit aktiven Websockets unterbricht, was keine Option ist.
HINWEIS: Ich möchte keine Vorlagensprachen wie Jade, EJC usw. verwenden.

Artur Grzesiak

Durch die Anforderung eines Moduls module.exportswird es für alle zukünftigen Aufrufe von zwischengespeichert require. Sie können den Cache programmgesteuert leeren: http://nodejs.org/docs/latest/api/globals.html#globals_require_cache . Wenn Sie dies zusätzlich bei einer Dateiänderung tun möchten, können Sie Folgendes verwenden fs.watch: http://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener .

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie kann ich die Stoppwortliste aktualisieren, ohne den Postgres-Server neu zu starten?

Node.js: Wie ändere ich die Protokollebene, ohne den Server neu zu starten?

Wie kann man den Wert des $ () - Selektors im laufenden Betrieb ändern, um ihn zu verwenden, ohne den Inhalt neu zu laden?

Wie kann ich einen sstable neu erstellen, ohne den Cassandra-Knoten neu zu starten?

Wie kann ich eine Ressource in Android Studio aktualisieren, ohne sie neu zu starten?

Wie kann ich Flaschenvorlagen aktualisieren, ohne die uwsgi-Instanz neu zu starten?

Wie kann ich den Docker-Container stoppen / neu starten, ohne die Änderungen zu verlieren?

Wie kann ich --general-log aktivieren, ohne den MYSQL-Server neu zu starten?

asyncio - Wie kann ich den Server stoppen (und neu starten), ohne die Ereignisschleife zu stoppen?

Wie kann ich den Fabric Composer neu starten, ohne die vorhandenen Daten zu verlieren?

Wie kann ich zur Laufzeit einen gleichnamigen Zünddienst bereitstellen, ohne den Serverknoten neu zu starten?

Kann ich die Umgebungsvariablen des Containers ändern, ohne den Pod mithilfe von Kubernetes neu zu starten?

Wie ändere ich Javascript, ohne den Server neu zu starten?

Wie kann ich die Klasse und den Inhalt von div aktualisieren, ohne die Seite beim JSON-Update neu zu laden?

FramerJS - Wie kann man den Prototyp aus dem Code zurücksetzen oder aktualisieren, ohne ihn neu zu laden?

Wie aktualisiere ich den API-Endpunkt, ohne mein Express.js-Projekt neu zu starten?

Wie kann ich eine Variable aktualisieren / neu binden, ohne den Wert zu ändern?

Wie kann der Server mit Funktionen oder Änderungen aktualisiert werden, ohne ihn neu zu starten?

Wie kann ich den aktuellen Zeitstempel aktualisieren, ohne die Seite in vue.js zu aktualisieren?

Wie kann ich einen unaufhaltsamen Zombie-Job auf Jenkins stoppen, ohne den Server neu zu starten?

Wie kann ich neue Modelle hinzufügen und Migrationen durchführen, ohne den Server manuell neu zu starten?

IntelliJ Idea 15 - Wie "Ressourcen aktualisieren", ohne den Server neu zu starten?

Docker-Compose - Kann ich Labels aktualisieren, ohne einen Container neu zu starten?

Wie lade ich eine App in Genymotion und Android Studio neu, ohne den Emulator neu zu starten?

Wie starte ich den SHA256MigrationJob neu, ohne Artifactory neu zu starten?

Wie kann ich mein ViewModel in WPF neu laden, ohne die Anwendung neu zu starten?

Wie kann ich Serilog neu konfigurieren, ohne die Anwendung neu zu starten?

Apache Flink: Wie kann ich ein aktualisiertes JAR neu laden, ohne meinen Job neu zu starten?

Wie lade ich Knoten in Node-RED neu, ohne neu zu starten?

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  3. 3

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  4. 4

    Eclipse Oxygen - Projekte verschwinden

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Wie kann ich den Kaskadenmodus global einstellen?

  7. 7

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  8. 8

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  9. 9

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  10. 10

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  11. 11

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  12. 12

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  13. 13

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  14. 14

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  15. 15

    Wie wählt man Unterschiede mit drei Tabellen aus?

  16. 16

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  17. 17

    Wie kann ich meine Tabelle abfragen, um sie in mySQL nach 2 Feldern zu gruppieren?

  18. 18

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  19. 19

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  20. 20

    Modbus Python Schneider PM5300

  21. 21

    Wie kann eine gleichmäßige Lastverteilung in ElasticSearch mit Indizes mit unterschiedlicher Anzahl von Shards erreicht werden?

heißlabel

Archiv