Referindo -me ao exemplo do servidor estático acima do CNODEJS.org, escrevi o seguinte exemplo de servidor estático Nodejs, que contém cache e compactação, e o código é o seguinte:
A cópia do código é a seguinte:
/**
* Exemplo de teste de servidor de arquivos estático
* Usuário: xuwm
* Data: 13-5-17
* Horário: 8:38
* Para alterar este modelo, use o arquivo | Configurações | Modelos de arquivo.
*/
porta var = 3333;
var http = requer ("http");
var url = requer ("url");
var fs = requer ("fs");
var path = requer ("caminho");
var mime = requer ("./ MIME"). Tipos;
var config = requer ("./ config");
var zlib = requer ("zlib");
// Crie servidor HTTP
var server = http.createServer (função (request, resposta) {
var obj = url.parse (request.url);
Response.setheader ("servidor", "nó/v8");
console.log (obj);
var pathname = obj.pathname;
if (pathname.slice (-1) === "/") {
PathName = PathName+config.welcome.file; // O padrão padrão.html é selecionado sob o padrão atual
}
var realPath = Path.Join ("Ativos", Path.Normalize (PathName.Replace (//././ G, "" ")));
console.log (RealPath);
var pathhandle = function (realpath) {
// use o método fs.stat para obter o arquivo
fs.stat (realpath, function (err, estatísticas) {
if (err) {
Response.WriteHead (404, "não encontrado", {'content-type': 'text/plana'});
Response.Write ("A solicitação"+RealPath+"não é encontrada");
resposta.END ();
}outro{
if (stats.isdirectory ()) {
}outro{
var ext = path.extName (realpath);
ext = ext? ext.slice (1): 'desconhecido';
var contentType = MIME [ext] || "Texto/simples";
Response.setheader ("Content-Type", contentType);
var lastModified = stats.mtime.toutcstring ();
var ifmodifiedSince = "if modificou-se-since" .TolowerCase ();
Response.setheader ("Último modificado", por último);
if (ext.match (config.expires.filematch)) {
var expira = new Date ();
expires.setTime (expires.getTime () + config.expires.maxage * 1000);
Response.setheader ("Expira", expira.toutcString ());
Response.setheader ("Cache-Control", "max-age =" + config.expires.maxage);
}
if (request.headers [ifmodifiedSince] && lastModified == request.headers [ifModifiedSince]) {
console.log ("busca do navegador")
Response.writehead (304, "não modificado");
resposta.END ();
} outro {
var RAW = fs.creteReadstream (RealPath);
var aceitEncoding = request.Headers ['Acepcodinging'] || "";
var correspondente = ext.match (config.compress.match);
if (correspondente && aceitEncoding.match (// bgzip/b/)) {
Response.Writehead (200, "OK", {'Content-Encoding': 'Gzip'});
Raw.pipe (zlib.creategzip ()). tubo (resposta);
} else if (correspondente && aceitEncoding.match (// bdeflate/b/)) {
Response.Writehead (200, "OK", {'Content-Encoding': 'Deflate'});
Raw.pipe (zlib.createflate ()). tubo (resposta);
} outro {
Response.Writehead (200, "OK");
Raw.pipe (resposta);
}
}
}
}
});
}
PathHandle (Realpath);
});
Server.Listen (porta);
console.log ("servidor http executado na porta:"+porta);
Primeiro, você precisa criar uma pasta de ativos no arquivo JS e colocar os arquivos estáticos que deseja navegar, como index.html, Demo.js, etc.
O método em execução é: Alterne para o diretório de arquivos JS acima na linha de comando e digite o nome do arquivo JS do nó JS
Digite http: // localhost: 3333/no navegador para ver o efeito.
-preencher os dois módulos ausentes no código acima
MIME.JS
A cópia do código é a seguinte:
exports.types = {
"css": "text/css",
"gif": "imagem/gif",
"html": "text/html",
"ico": "imagem/x-icon",
"jpeg": "imagem/jpeg",
"jpg": "imagem/jpeg",
"js": "texto/javascript",
"JSON": "Aplicativo/JSON",
"pdf": "aplicativo/pdf",
"png": "imagem/png",
"svg": "imagem/svg+xml",
"SWF": "Application/X-Shockwave-Flash",
"tiff": "imagem/tiff",
"txt": "texto/simples",
"wav": "áudio/x-wav",
"WMA": "áudio/x-ms-wma",
"WMV": "Video/X-MS-WMV",
"xml": "texto/xml"
};
config.js
A cópia do código é a seguinte:
exports.expires = {
filematch: /^(gif | png | jpg | js | css) $ /ig,
Maxage: 60 * 60 * 24 * 365
};
exports.compress = {
Match: /css | js | html /ig
};
exports.welcome = {
Arquivo: "Index.html"
};