javascript - attribute - title html css
Express: ¿Configuración de tipo de contenido basado en ruta/archivo? (6)
Además, si desea ampliar los mime-tipos que Express (connect) conoce, puede hacer
express.static.mime.define({''text/plain'': [''md'']});
o
connect.static.mime.define({''text/plain'': [''md'']});
PD: el módulo mime ahora se encuentra en mime.lookup
Sé que Express tiene el método res.contentType (), pero ¿cómo configurar automáticamente el tipo de contenido basado en la ruta / archivo (incluido el contenido estático)?
Descarga esta database (u Otro enlace ): mime.types:, luego
var db_mimes=[],mime_ext=''''
$.get(''mime.types'',{},function(d){
var lines=d.split(''/n'').filter(function(e){ /* filter which starts with #*/})
lines.forEach(function(line){
mime_ext=line.split('' '')
mime_ext[1].split('' '').forEach(function(ext){
db_mimes.push({e:ext,m:mime_ext[0]})
});
//create object for each line . i.e: {mime:'''',extension}
});
});
Entonces, si tiene fo ejemplo var fname="myfile.png"
var extension=fname.substr((~-this.lastIndexOf(".") >>> 0) + 2) // get extension from name
var minme=db_mimes.filter(function(el){return el.e === extension})[0]
Ejecuta el siguiente cmd:
npm install xmimetype ;
Luego, en su código:
var xm=require("xmimetype");
xm.mimetypeOf("java");
xm.mimetypeOf("./lib/Person.java");
// -> text/x-java-source
xm.mimetypeOf("docx");
xm.mimetypeOf("./lib/overview.docx");
// -> application/vnd.openxmlformats-officedocument.wordprocessingml.document
Para más información, consulte el repositorio GIT .
Lo contrario está disponible:
xm.extensionsOf("image/jpeg");
// -> [ ''jpeg'', ''jpg'', ''jpe'' ]
Express usa Connect, Connect usa Mime, e Mime incluye los archivos mime.types (con los tipos de mime predeterminados de Apache) y node.types (con algunos tipos adicionales contribuidos por la comunidad de nodos). Puede simplemente personalizar uno de estos archivos dentro de su copia de mime en node_modules para agregar el tipo de contenido requerido, o Mime también tiene una API que le permite especificar tipos de contenido adicionales o archivos .types para cargar desde su código.
La documentación de Express muestra que puede hacer esto si pasa el nombre del archivo.
var filename = ''path/to/image.png'';
res.contentType(filename);
// Content-Type is now "image/png"
[Editar]
Aquí hay un ejemplo que sirve archivos de un directorio relativo llamado static
y establece automáticamente el tipo de contenido basado en el archivo servido:
var express = require(''express'');
var fs = require(''fs'');
var app = express.createServer();
app.get(''/files/:file'', function(req, res) {
// Note: should use a stream here, instead of fs.readFile
fs.readFile(''./static/'' + req.params.file, function(err, data) {
if(err) {
res.send("Oops! Couldn''t find that file.");
} else {
// set the content type based on the file
res.contentType(req.params.file);
res.send(data);
}
res.end();
});
});
app.listen(3000);
Connect establecerá automáticamente el tipo de contenido, a menos que usted mismo lo establezca explícitamente. Aquí está el fragmento que lo hace. Utiliza mime.lookup y mime.charsets.lookup
// mime type
type = mime.lookup(path);
//<SNIP>....
// header fields
if (!res.getHeader(''content-type'')) {
var charset = mime.charsets.lookup(type);
res.setHeader(''Content-Type'', type + (charset ? ''; charset='' + charset : ''''));
}
Si esto no funciona para usted, publique su código ya que su código personalizado probablemente esté interfiriendo con el comportamiento predeterminado de alguna manera.