Refiriéndose al ejemplo del servidor estático anterior cnodeJs.org, escribí el siguiente ejemplo de servidor estático de nodejs, que contiene caché y compresión, y el código es el siguiente:
La copia del código es la siguiente:
/**
* Ejemplo de prueba del servidor de archivos estáticos
* Usuario: XUWM
* Fecha: 13-5-17
* Hora: 8:38 am
* Para cambiar esta plantilla, use archivo | Configuración | Plantillas de archivo.
*/
puerto var = 3333;
var http = require ("http");
var url = require ("url");
var fs = require ("fs");
ruta var = requerir ("ruta");
var mime = request ("./ mime"). tipos;
var config = request ("./ config");
var zLib = require ("zlib");
// Crear servidor HTTP
var servidor = http.createServer (función (solicitud, respuesta) {
var obj = url.parse (request.url);
respuesta.setheader ("servidor", "nodo/v8");
console.log (obj);
var rathName = obj.pathName;
if (pathname.slice (-1) === "/") {
PathName = PathName+config.welcome.file; // El valor predeterminado de index.html se selecciona en el valor predeterminado actual
}
var realPath = path.join ("activos", path.normalize (pathname.replace (//././ g, ""));
console.log (RealPath);
var pathhandle = function (realPath) {
// usa el método Fs.stat para obtener el archivo
fs.stat (realPath, function (err, stats) {
if (err) {
Response.Writehead (404, "no encontrado", {'Content-type': 'Text/Plain'});
Respuesta.write ("La solicitud"+RealPath+"no se encuentra");
respuesta.end ();
}demás{
if (stats.isDirectory ()) {
}demás{
var ext = path.extname (realPath);
ext = ext? ext.slice (1): 'desconocido';
var contentType = mime [ext] || "texto/simple";
respuesta.setheader ("Content-type", contentType);
var lastmodified = stats.mtime.toutCString ();
var ifModifiedsince = "if modificado-since" .tolowercase ();
respuesta.setheader ("Último modificado", LastModified);
if (ext.match (config.expires.filematch)) {
var expira = nueva fecha ();
expires.settime (expires.gettime () + config.expires.maxage * 1000);
respuesta.setheader ("expires", expires.ToutCString ());
Response.setheader ("Cache-Control", "max -ge =" + config.expires.maxage);
}
if (request.headers [ifModifiedSince] && lastModified == request.headers [ifModifiedsince]) {
console.log ("buscar en el caché del navegador")
Response.Writehead (304, "no modificado");
respuesta.end ();
} demás {
var raw = fs.CreateReadStream (RealPath);
VAR aceptadoCoding = request.headers ['Acept-ending'] || "";
var coincidente = ext.match (config.compress.match);
if (Matched && aceptación.match (// bgzip/b/)) {
Response.Writehead (200, "Ok", {'Content-Engoding': 'GZIP'});
raw.pipe (zlib.creategzip ()). tubería (respuesta);
} else if (coincidente && aceptadoDing.match (// bdeflate/b/)) {
Response.Writehead (200, "Ok", {'Engeneración de contenido': 'Deflar'});
raw.pipe (zlib.createDeflate ()). tubería (respuesta);
} demás {
Response.Writehead (200, "OK");
crudo. Tipe (respuesta);
}
}
}
}
});
}
Pathhandle (RealPath);
});
servidor.listen (puerto);
console.log ("servidor HTTP ejecutado en el puerto:"+puerto);
Primero, debe crear una carpeta de activos en el archivo JS y colocar los archivos estáticos que desea navegar, como index.html, demo.js, etc.
El método en ejecución es: cambiar al directorio de archivos JS anterior en la línea de comando y luego ingresar el nombre del archivo de nodo JS
Ingrese http: // localhost: 3333/en el navegador para ver el efecto.
--La llenar en los dos módulos faltantes en el código anterior
mime.js
La copia del código es la siguiente:
exports.types = {
"CSS": "Texto/CSS",
"GIF": "Imagen/GIF",
"html": "texto/html",
"ICO": "Image/X-Icon",
"JPEG": "Imagen/JPEG",
"JPG": "Imagen/JPEG",
"JS": "Text/JavaScript",
"JSON": "Aplicación/JSON",
"PDF": "Aplicación/PDF",
"PNG": "Imagen/PNG",
"SVG": "Image/SVG+XML",
"SWF": "Aplicación/X-Shockwave-Flash",
"TIFF": "Imagen/TIFF",
"txt": "texto/simple",
"wav": "audio/x-wav",
"WMA": "Audio/X-MS-WMA",
"WMV": "Video/X-MS-WMV",
"xml": "texto/xml"
};
config.js
La copia del código es la siguiente:
exports.expires = {
fileMatch: /^(gif | png | jpg | js | css) $ /ig,
Maxage: 60 * 60 * 24 * 365
};
exports.compress = {
Match: /CSS | JS | HTML /IG
};
exports.welcome = {
Archivo: "index.html"
};