En me référant à l'exemple de serveur statique sur cnodejs.org, j'ai écrit l'exemple de serveur statique nodejs suivant, qui inclut le cache et la compression. Le code est le suivant :
.
var lastModified = stats.mtime.toUTCString();
var ifModifiedSince = "If-Modified-Since".toLowerCase();
réponse.setHeader("Last-Modified", lastModified);
if (ext.match(config.Expires.fileMatch)) {
var expire = new Date();
expires.setTime(expires.getTime() config.Expires.maxAge * 1000);
réponse.setHeader("Expires", expires.toUTCString());
réponse.setHeader("Cache-Control", "max-age=" config.Expires.maxAge);
>
if (request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]) {
console.log("从浏览器cache里取")
réponse.writeHead(304, "Non modifié");
réponse.end();
} autre {
var raw = fs.createReadStream(realPath);
var acceptEncoding = request.headers['accept-encoding'] || "";
var matched = ext.match(config.Compress.match);
if (matched && acceptEncoding.match(/bgzipb/)) {
réponse.writeHead(200, "Ok", {'Content-Encoding': 'gzip'});
raw.pipe(zlib.createGzip()).pipe(response);
} else if (matched && acceptEncoding.match(/bdeflateb/)) {
réponse.writeHead(200, "Ok", {'Content-Encoding': 'deflate'});
raw.pipe(zlib.createDeflate()).pipe(response);
} autre {
réponse.writeHead(200, "Ok");
raw.pipe(réponse);
>
>
>
>
});
}
pathHandle(realPath);
});
serveur.écouter(port);
console.log("serveur http exécuté dans le port :" port);
JS utilise JS pour les actifs, et index.html,demo.js.
运行方式为:在命令行里切换到上面的JS的文件目录,然后输入 node JS文件名
浏览器内输入http://localhost:3333/就会看到效果。
--补上上面代码里缺少的两个模块
mime.js
"css": "texte/css",
"gif": "image/gif",
"html": "texte/html",
"ico": "image/x-icône",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "texte/javascript",
"json": "application/json",
"pdf": "application/pdf",
"png": "image/png",
"svg": "image/svg xml",
"swf": "application/x-shockwave-flash",
"tiff": "image/tiff",
"txt": "text/plain",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"wmv": "video/x-ms-wmv",
"xml": "texte/xml"
};
config.js
exports.Compress = {
correspondance : /css|js|html/ig
};
exports.Bienvenue = {
fichier : "index.html"
};