In Bezug auf das Beispiel des statischen Servers oben Cnodejs.org habe ich das folgende Beispiel für NodeJS Static Server geschrieben, das Cache und Komprimierung enthält, und der Code lautet wie folgt:
Die Codekopie lautet wie folgt:
/**
* Beispiel für statische Dateiserver -Test
* Benutzer: xuwm
* Datum: 13-5-17
* Zeit: 8:38 Uhr
* Um diese Vorlage zu ändern, verwenden Sie Datei | Einstellungen | Dateivorlagen.
*/
var port = 3333;
var http = required ("http");
var url = erfordern ("url");
var fs = require ("fs");
var path = require ("path");
var mime = required ("./ mime"). Typ;
var config = required ("./ config");
var zlib = required ("zlib");
// HTTP -Server erstellen
var server = http.createServer (Funktion (Anfrage, Antwort) {
var obj = url.parse (request.Url);
response.setheader ("server", "node/v8");
console.log (obj);
var pathname = obj.PathName;
if (pathname.slice (-1) === "/") {
pathname = pathname+config.welcome.file; // Der Standard index.html wird unter dem aktuellen Standard ausgewählt
}
var realpath = path.join ("assets", path.normalize (pathname.replace (//././ g, ""));
console.log (RealPath);
var pathHandle = function (realPath) {
// Verwenden Sie die Fs.Stat -Methode, um die Datei abzurufen
fs.stat (RealPath, Funktion (Err, Statistiken) {
if (err) {
response.writeHead (404, nicht gefunden ", {'content-type': 'text/plain'});
Antwort.Write ("Die Anfrage"+RealPath+"wird nicht gefunden");
Antwort.end ();
}anders{
if (stats.isdirectory ()) {
}anders{
var ext = path.extName (realPath);
ext = ext? Ext.Slice (1): 'Unbekannt';
var contentType = mime [ext] || "Text/Ebene";
response.setheader ("content-Typ", contentType);
var lastModified = stats.mtime.toutcstring ();
var ifModifiedSince = "if-modified-since" .TolowerCase ();
response.setheader ("last-modified", lastModified);
if (ext.match (config.expires.filematch)) {
var ablehnt = neues Datum ();
expires.settime (expires.getTime () + config.expires.maxage * 1000);
response.setheader ("läuft", läuft.toutcstring ());
response.setheader ("cache-control", "max-age =" + config.expires.maxage);
}
if (request.Headerers [ifModifiedSince] && lastModified == Request.Headerers [ifModifiedSince]) {
console.log ("vom Browser -Cache abrufen")
Antwort.WriteHead (304, "nicht modifiziert");
Antwort.end ();
} anders {
var raw = fs.createadstream (RealPath);
var AcceptCoding = Request.Headerers ['Akzeptieren-Coding'] || "";
var Matched = ext.match (config.compress.match);
if (Matched && AcceptCoding.match (// Bgzip/b/)) {
response.writeHead (200, "OK", {'Content-Coding': 'GZIP'});
Raw.pipe (Zlib.CreateGzip ()). Pipe (Antwort);
} else if (Matched && AcceptCoding.Match (// Bdeflate/b/)) {
response.writeHead (200, "OK", {'Content-Coding': 'Deflate'});
Raw.pipe (Zlib.CreateDeflate ()). Pipe (Antwort);
} anders {
Antwort.WriteHead (200, "OK");
Raw.Pipe (Antwort);
}
}
}
}
});
}
PathHandle (RealPath);
});
Server.Listen (Port);
console.log ("HTTP -Server im Port ausgeführt werden:"+port);
Zunächst müssen Sie einen Assets -Ordner in der JS -Datei erstellen und die statischen Dateien, die Sie stöbern möchten, wie index.html, Demo.js usw. einstellen.
Ausführungsmethode lautet: Wechseln Sie zum obigen JS -Dateiverzeichnis in der Befehlszeile und geben Sie dann den Namen des Knotens JS -Datei ein
Geben Sie http: // localhost: 3333/in den Browser ein, um den Effekt anzuzeigen.
-Füllen Sie die beiden fehlenden Module im obigen Code ein
mime.js
Die Codekopie lautet wie folgt:
exports.types = {
"CSS": "Text/CSS",
"GIF": "Bild/Gif",
"html": "text/html",
"ICO": "Bild/X-Icon",
"JPEG": "Image/JPEG",
"JPG": "Image/JPEG",
"JS": "Text/JavaScript",
"JSON": "Anwendung/JSON",
"PDF": "Anwendung/PDF",
"PNG": "Bild/PNG",
"SVG": "Bild/SVG+XML",
"SWF": "Anwendung/X-Shockwave-Flash",
"Tiff": "Bild/Tiff",
"Txt": "Text/Plain",
"WAV": "Audio/X-Wav",
"WMA": "Audio/X-MS-WMA",
"WMV": "Video/X-MS-WMV",
"XML": "Text/XML"
};
config.js
Die Codekopie lautet wie folgt:
exports.expires = {
filematch: /^(gif | png | jpg | js | css) $ /ig,
Maxage: 60 * 60 * 24 * 365
};
exports.compress = {
Match: /CSS | JS | HTML /IG
};
exports.welcome = {
Datei: "index.html"
};