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.
Durch die Anforderung eines Moduls module.exports
wird 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.
Lass mich ein paar Worte sagen