So che Express ha il metodo res.contentType(), ma come impostare automaticamente il tipo di contenuto in base a percorso/file (incluso contenuto statico)?Express: impostazione del tipo di contenuto in base al percorso/file?
risposta
Connect automaticamente sarà imposta il tipo di contenuto, a meno che tu non lo imposti esplicitamente. Ecco lo snippet che lo fa. Esso utilizza mime.lookup e 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 : ''));
}
Se questo non funziona per voi, pubblicare il tuo codice come il codice personalizzato è probabile che interferisce con il comportamento di default in qualche modo.
Il numero Express documentation indica che è possibile farlo se si passa il nome del file.
var filename = 'path/to/image.png';
res.contentType(filename);
// Content-Type is now "image/png"
[Edit]
Ecco un esempio che serve i file da una directory relativa chiamato static
e imposta il tipo di contenuto in base al file servito automaticamente:
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);
Grazie, ma è quello che voglio evitare ... voglio solo che sia automatica sulla base di percorso o il nome del file. – mahemoff
Non sono sicuro di aver capito. Puoi pubblicare un piccolo esempio? –
Ho aggiornato la mia risposta con un esempio. Sto ancora fraintendendo quello che stai cercando? –
Express utilizza Connect, Connect utilizza Mimo e Mime include i file mime.types (con i tipi MIME predefinito da Apache) e node.types (con alcuni altri tipi hanno contribuito da comunità nodo) . Puoi semplicemente personalizzare uno di questi file all'interno della tua copia di mime in node_modules per aggiungere il tuo tipo di contenuto richiesto, oppure Mime ha anche un'API che ti permette di specificare altri tipi di contenuto o di file .types da caricare dal tuo codice.
L'aggiunta di definizioni mime tramite 'require (" mime "). Define (...)' non funziona. Potrebbe essere dovuto al fatto che express bundle è il proprio modulo mime? Come posso accedere al modulo mime in bundle? – panzi
Inoltre, se si desidera estendere i tipi MIME che esprimere (collegamento) conosce, si può fare
express.static.mime.define({'text/plain': ['md']});
o
connect.static.mime.define({'text/plain': ['md']});
PS: il mimo il modulo si trova ora a https://github.com/broofa/node-mime
Scarica questo database (o Another link): mime.types:, poi
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}
});
});
Quindi se avete fo esempio 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]
downvoted a causa di un collegamento interrotto –
Ho cambiato il collegamento, faccio di nuovo clic e rimuovo il voto-giù: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –
grazie Abdennour –
Eseguire il seguente cmd:
npm install xmimetype ;
Poi, nel tuo codice:
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
Per ulteriori informazioni, verificare GIT repository.è
L'opposto disponibili:
xm.extensionsOf("image/jpeg");
// -> [ 'jpeg', 'jpg', 'jpe' ]
- 1. Impostazione del tipo di contenuto/codifica in Jersey REST Client
- 2. impostazione tipo di contenuto in riposo assicurato
- 3. Impostazione del tipo di contenuto della risposta senza utilizzare HttpServletResponse
- 4. Impostazione della dichiarazione del copyright in base al progetto?
- 5. Rileva la direzione del testo in base al contenuto
- 6. Come determinare il tipo MIME del file in base al contenuto?
- 7. stile impostazione in base all'esistenza di un tipo antenato
- 8. Come utilizzare automaticamente un DataTemplate in base al tipo di contenuto corrente di ContentControl
- 9. impostazione del tipo di contenuto in java per il download del file
- 10. Come impostare l'altezza di UIWebView in base al contenuto HTML?
- 11. Divisione di un file in linux in base al contenuto
- 12. Impostazione del percorso di base con ConfigurationBuilder
- 13. Filtraggio di un elenco di stringhe in base al contenuto
- 14. Come analizzare la richiesta HTTP con un tipo di contenuto mancante in Express/NodeJs, assumendo un tipo di contenuto predefinito?
- 15. WinHttp.WinHttpRequest aggiungendo al tipo di contenuto
- 16. cambia cella sfondo di jquery datatable in base al contenuto
- 17. Impostazione della durata del timeout del cookie auth in base al ruolo in ASP.NET
- 18. Impostazione del tipo di contenuto di una risposta vuota in ASP.NET MVC
- 19. Ridimensionamento della finestra di SmartGWT in base al contenuto
- 20. getResourceAsStream percorsofile durante l'esecuzione .jar
- 21. Selezione di diversi storyboard in base al tipo di dispositivo
- 22. Filtraggio dei file visualizzati in OpenFileDialog in base al contenuto?
- 23. Ridimensionare dinamicamente div in base al contenuto dinamico?
- 24. Come ridimensionare NSTextView in base al suo contenuto?
- 25. Java - percorsofile - non valido sequenza di escape
- 26. Visibilità stackpanel in base al contenuto dell'etichetta non funzionante
- 27. Pulsante personalizzato accanto al pulsante "AGGIUNGI AL CARRELLO" di WooCommerce in base al tipo di prodotto
- 28. Impostazione del messaggio di un'eccezione personalizzata senza passarla al costruttore di base
- 29. Seleziona elemento in base al contenuto testo esatto
- 30. Aggiungi intestazione personalizzata in base al tipo di file
'mime.lookup()' è ora rinominato in 'mime.getType()'. – Pei