Ссылаясь на пример статического сервера выше Cnodejs.org, я написал следующий пример статического сервера Nodejs, который содержит кэш и сжатие, и код следующим образом:
Кода -копия выглядит следующим образом:
/**
* Пример испытания статического файлового сервера
* Пользователь: xuwm
* Дата: 13-5-17
* Время: 8:38 утра
* Чтобы изменить этот шаблон Использовать файл | Настройки | Шаблоны файлов.
*/
var port = 3333;
var http = require ("http");
var url = require ("url");
var fs = require ("fs");
var path = require ("path");
var mime = require ("./ mime"). Типы;
var config = require ("./ config");
var zlib = require ("zlib");
// Создать http -сервер
var server = http.createserver (function (запрос, ответ) {
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; // Индекс по умолчанию. HTML выбирается в соответствии с текущим дефолтом
}
var realPath = path.join ("Assets", path.normalize (pathname.replace (//././ g, ""));
Console.log (RealPath);
var pathhandle = function (realpath) {
// Используйте метод fs.stat, чтобы получить файл
fs.stat (realpath, function (err, stats) {
if (err) {
response.writehead (404, «не найден», {'content-type': 'text/plain'});
response.write («запрос»+realpath+»не найден»);
response.end ();
}еще{
if (stats.isdirectory ()) {
}еще{
var ext = path.extname (realpath);
ext = ext? ext.slice (1): «неизвестно»;
var contentype = mime [ext] || "Текст/простой";
response.setheader ("контент-тип", ContentType);
var lastmodified = stats.mtime.toutcstring ();
var ifmodifiedsince = "if-modified-scince" .tolowercase ();
response.setheader («Последний модифицированный», Lastmodifified);
if (ext.match (config.expires.filematch)) {
var истекает = новая дата ();
истечь. settime (expires.gettime () + config.expires.maxage * 1000);
response.setheader («истекает», истекает.toutcstring ());
response.setheader ("Cache-Control", "max-age =" + config.expires.maxage);
}
if (request.headers [ifmodifiedsince] && lastmodified == request.headers [ifmodifiedsince]) {
console.log ("Принесите из кеша браузера")
response.writehead (304, «не изменен»);
response.end ();
} еще {
var raw = fs.createreadstream (realpath);
var AcceptEncoding = request.Headers ['Accept-Encoding'] || "";
var matched = ext.match (config.compress.match);
if (matched && acceptencoding.match (// bgzip/b/)) {
response.writehead (200, "ok", {'content-coding': 'gzip'});
raw.pipe (zlib.creategzip ()). Pipe (ответ);
} else if (matched && acceptencoding.match (// bdeflate/b/)) {
response.writehead (200, "ok", {'content-coding': 'Deflate'});
raw.pipe (zlib.createdeflate ()). Pipe (ответ);
} еще {
response.writehead (200, "ok");
raw.pipe (ответ);
}
}
}
}
});
}
Pathhandle (RealPath);
});
server.listen (порт);
console.log ("http -сервер запускается в порту:"+port);
Во -первых, вам нужно создать папку активов в файле JS и поместить статические файлы, которые вы хотите просмотреть, такие как index.html, demo.js и т. Д.
Запуск метода: переключиться на указанный выше каталог файлов JS в командной строке, а затем введите имя файла Node JS
Введите http: // localhost: 3333/в браузере, чтобы увидеть эффект.
-Заполните в двух пропущенных модулях в приведенном выше коде
mime.js
Кода -копия выглядит следующим образом:
exports.types = {
"CSS": "Текст/CSS",
"GIF": "изображение/GIF",
"html": "text/html",
"ICO": "Image/X-ICon",
"JPEG": "Image/JPEG",
"JPG": "Image/JPEG",
"JS": "Текст/JavaScript",
"JSON": "Приложение/JSON",
"PDF": "Приложение/PDF",
"Png": "Image/png",
"SVG": "Image/SVG+XML",
"SWF": "Application/X-Shockwave-Flash",
"TIFF": "Изображение/Тифф",
"txt": "текст/простой",
"wav": "audio/x-wav",
"WMA": "Audio/X-MS-WMA",
"WMV": "Video/X-MS-WMV",
"xml": "text/xml"
};
config.js
Кода -копия выглядит следующим образом:
exports.expires = {
FileMatch: /^(GIF | PNG | JPG | JS | CSS) $ /IG,
Максаж: 60 * 60 * 24 * 365
};
exports.compress = {
Матч: /CSS | JS | HTML /IG
};
exports.welcome = {
Файл: "index.html"
};