2011-08-18 22 views
12

मुझे पता है कि एक्सप्रेस में res.contentType() विधि है, लेकिन पथ/फ़ाइल (स्थिर सामग्री सहित) के आधार पर स्वचालित रूप से सामग्री प्रकार कैसे सेट करें?एक्सप्रेस: ​​पथ/फ़ाइल के आधार पर सामग्री-प्रकार सेट करना?

उत्तर

6

Connect स्वचालित रूप से होगा सामग्री प्रकार सेट करें, जब तक कि आप इसे स्पष्ट रूप से सेट न करें। यहां स्निपेट है जो यह करता है। यह mime.lookup का उपयोग करता है और यह आपके लिए काम नहीं कर रहा है, तो अपने कोड पोस्ट के रूप में अपने कस्टम कोड की संभावना किसी भी तरह डिफ़ॉल्ट व्यवहार के साथ दखल दे रहा है 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 : '')); 
} 

+0

'mime.lookup()' का नाम बदलकर 'mime.getType()' कर दिया गया है। – Pei

8

Express documentation दिखाता है कि यदि आप फ़ाइल नाम में पास करते हैं तो यह ऐसा कर सकता है।

var filename = 'path/to/image.png'; 
res.contentType(filename); 
// Content-Type is now "image/png" 

[संपादित करें]

यहाँ एक उदाहरण है जो static कहा जाता है एक रिश्तेदार निर्देशिका से फ़ाइलों में कार्य करता है और स्वचालित रूप से सेट सामग्री फ़ाइल के आधार पर प्रकार की सेवा:

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); 
+0

धन्यवाद, लेकिन है कि मैं क्या से बचना चाहते हैं ... बस यह पथ या फ़ाइल नाम के आधार स्वत: होना चाहते है। – mahemoff

+0

मुझे यकीन नहीं है कि मैं समझता हूं। क्या आप एक छोटा सा उदाहरण पोस्ट कर सकते हैं? –

+0

मैंने एक उदाहरण के साथ अपना जवाब अपडेट कर दिया है। क्या मैं अभी भी गलत समझ रहा हूं कि आप क्या खोज रहे हैं? –

2

एक्सप्रेस कनेक्ट उपयोग करता है, कनेक्ट माइम का उपयोग करता है, और माइम फ़ाइलों mime.types और node.types (अपाचे से डिफ़ॉल्ट माइम प्रकार के साथ) (कुछ आगे प्रकार नोड समुदाय द्वारा योगदान के साथ) भी शामिल है । आप अपनी आवश्यक सामग्री प्रकार जोड़ने के लिए node_modules में माइम की अपनी प्रतिलिपि में इन फ़ाइलों में से किसी एक को अनुकूलित कर सकते हैं, या माइम में एक एपीआई भी है जो आपको अपने कोड से लोड करने के लिए अतिरिक्त सामग्री-प्रकार या .types फ़ाइलों को निर्दिष्ट करने देती है।

https://github.com/broofa/node-mime

+0

'आवश्यकता ("माइम") के माध्यम से माइम परिभाषाओं को जोड़ना। परिभाषित (...) 'काम नहीं करता है। क्या ऐसा हो सकता है क्योंकि एक्सप्रेस अपने स्वयं के माइम मॉड्यूल को बंडल करता है? मैं बंडल माइम मॉड्यूल का उपयोग कैसे करूं? टूटी हुई लिंक – panzi

24

इसके अलावा, अगर आप माइम-प्रकार कि व्यक्त (कनेक्ट) के बारे में जानता का विस्तार करना चाहते हैं, तो आप

express.static.mime.define({'text/plain': ['md']}); 

या

connect.static.mime.define({'text/plain': ['md']}); 

पी एस कर सकते हैं: माइम मॉड्यूल अब https://github.com/broofa/node-mime

0

पर स्थित है 0 डाउनलोड करें(या Another link): mime.types:, तो

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} 
    }); 


}); 

तो फिर तुम उदाहरण 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] 

+0

डाउनवॉटेड, मैं लिंक बदलता हूं, फिर से क्लिक करता हूं और वोट-डाउन हटा देता हूं: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –

+0

के कारण –

+0

धन्यवाद अब्देनॉर –

0

के लिए है, तो भागो cmd निम्नलिखित:

npm install xmimetype ; 

फिर, आपके कोड में:

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 

अधिक जानकारी के लिए, GIT repository देखें।


विपरीत उपलब्ध है:

xm.extensionsOf("image/jpeg"); 
// -> [ 'jpeg', 'jpg', 'jpe' ]