Mengacu pada contoh server statis di atas cnodeJs.org, saya menulis contoh server statis nodeJS berikut, yang berisi cache dan kompresi, dan kode adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
/**
* Contoh uji server file statis
* Pengguna: xuwm
* Tanggal: 13-5-17
* Waktu: 8:38 pagi
* Untuk mengubah template ini gunakan file | Pengaturan | Templat file.
*/
var port = 3333;
var http = membutuhkan ("http");
var url = membutuhkan ("url");
var fs = membutuhkan ("fs");
var path = membutuhkan ("path");
var mime = membutuhkan ("./ mime"). tipe;
var config = membutuhkan ("./ config");
var zlib = membutuhkan ("zlib");
// Buat server http
var server = http.createServer (function (request, response) {
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; // index.html default dipilih di bawah default saat ini
}
var realpath = path.join ("aset", path.normalize (pathname.replace (//././ g, ""))));
console.log (realpath);
var pathHandle = function (realpath) {
// Gunakan metode fs.stat untuk mendapatkan file
fs.stat (realpath, function (err, statistik) {
if (err) {
response.writeHead (404, "not found", {'content-type': 'Text/Plain'});
response.write ("permintaan"+realpath+"tidak ditemukan");
response.end ();
}kalau tidak{
if (stats.isdirectory ()) {
}kalau tidak{
var ext = path.extName (realpath);
ext = ext? ext.slice (1): 'tidak diketahui';
var contentType = mime [ext] || "teks/polos";
response.setheader ("tipe konten", contentType);
var lastmodified = stats.mtime.toutcstring ();
var ifmodifiedSince = "if-modified-since" .tolowercase ();
response.setHeader ("Modifikasi Terakhir", LastModified);
if (ext.match (config.expires.fileMatch)) {
var kedaluwarsa = tanggal baru ();
kedaluwarsa.settime (Expires.getTime () + config.expires.maxage * 1000);
response.setheader ("kedaluwarsa", kedaluwarsa.toutcString ());
response.setHeader ("cache-control", "max-seage =" + config.expires.maxage);
}
if (request.headers [ifmodifiedSince] && lastmodified == request.headers [ifmodifiedSince]) {
Console.log ("Fetch from Browser Cache")
response.writeHead (304, "tidak dimodifikasi");
response.end ();
} kalau tidak {
var raw = fs.createreadstream (realpath);
var acceptencoding = request.headers ['accept-encoding'] || "";
var dicocokkan = ext.match (config.compress.match);
if (cocok && penerimaan.match (// bgzip/b/)) {
response.writeHead (200, "ok", {'konten-encoding': 'gzip'});
raw.pipe (zlib.creategzip ()). pipa (respons);
} else if (dicocokkan && penerimaan.match (// bdeflate/b/)) {
response.writeHead (200, "ok", {'konten-encoding': 'deflate'});
raw.pipe (zlib.createdeflate ()). Pipe (respons);
} kalau tidak {
response.writeHead (200, "ok");
RAW.PIPE (Respons);
}
}
}
}
});
}
Pathhandle (RealPath);
});
server.listen (port);
Console.log ("Server HTTP dijalankan di port:"+port);
Pertama, Anda perlu membuat folder aset di file JS, dan meletakkan file statis yang ingin Anda jelajahi, seperti index.html, demo.js, dll.
Metode berjalan adalah: beralih ke direktori file js di atas pada baris perintah, dan kemudian masukkan nama file node js
Masukkan http: // localhost: 3333/di browser untuk melihat efeknya.
--Fill dalam dua modul yang hilang dalam kode di atas
mime.js
Salinan kode adalah sebagai berikut:
ekspor.types = {
"CSS": "Teks/CSS",
"gif": "gambar/gif",
"html": "teks/html",
"ico": "gambar/x-icon",
"jpeg": "gambar/jpeg",
"jpg": "gambar/jpeg",
"JS": "Teks/JavaScript",
"JSON": "Application/JSON",
"PDF": "Aplikasi/PDF",
"png": "gambar/png",
"svg": "gambar/svg+xml",
"SWF": "Aplikasi/X-Shockwave-Flash",
"Tiff": "Image/Tiff",
"txt": "teks/polos",
"WAV": "Audio/X-WAV",
"WMA": "Audio/X-MS-WMA",
"WMV": "Video/X-MS-WMV",
"xml": "Teks/xml"
};
config.js
Salinan kode adalah sebagai berikut:
Exports.Expires = {
FileMatch: /^(gif | png | jpg | js | css) $ /ig,
Maxage: 60 * 60 * 24 * 365
};
Exports.com Compress = {
kecocokan: /css | js | html /ig
};
ekspors.welcome = {
File: "Index.html"
};