2012-08-15 28 views
12

जब ब्राउज़र करने के लिए अपने Node.js सर्वर से स्क्रिप्ट भेजने, गूगल क्रोम में, मैं इस चेतावनी मिलती है Google ने आस-पास किया, और पाया कि यह एक सर्वर-साइड समस्या है, अर्थात्, मुझे लगता है कि मुझे उन्हें भेजने से पहले, सही MIME प्रकार को चीज़ों पर सेट करना चाहिए। यहाँ HTTP सर्वर के हैंडलर है:Node.js में फ़ाइल भेजने से पहले मैं एक एमआईएमई प्रकार कैसे सेट करूं?</p> <blockquote> <p>संसाधन स्क्रिप्ट के रूप में व्याख्या लेकिन MIME प्रकार पाठ के साथ स्थानांतरित/सादे</p> </blockquote> <p>मैं:

var handler = function(req, res) 
{ 
    url = convertURL(req.url); //I implemented "virtual directories", ignore this. 

    if (okURL(url)) //If it isn't forbidden (e.g. forbidden/passwd.txt) 
    { 
     fs.readFile (url, function(err, data) 
     { 
      if (err) 
      { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      //I think that I need something here. 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } 
    else //The user is requesting an out-of-bounds file. 
    { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 

प्रश्न: मैं अपने सर्वर साइड MIME प्रकार उचित ढंग से कॉन्फ़िगर कोड कैसे को दूर करते हैं?

(नोट: मैं पहले से ही https://github.com/broofa/node-mime मिला, लेकिन यह सिर्फ मेरे MIME प्रकार, यह "सेट" करने के लिए नहीं निर्धारित कर सकते हैं।) सामग्री प्रकार HTTP शीर्ष लेख के लिए

उत्तर

15

मैं यह पता लगा!

@ rdrey के link के लिए धन्यवाद और this node module मैं सही ढंग से इस तरह, प्रतिक्रिया के MIME प्रकार सेट करने में कामयाब रहे:

function handler(req, res) { 
    var url = convertURL(req.url); 

    if (okURL(url)) { 
     fs.readFile(url, function(err, data) { 
      if (err) { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      res.setHeader("Content-Type", mime.lookup(url)); //Solution! 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } else { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 
6

खोजें गूगल।

तो यह पता लगाने के साथ http://expressjs.com/api.html#res.set

उफ़ इसे कैसे सेट, उदाहरण के अपने जवाब भी शामिल है,)

बस फ़ाइल समाप्त होने की जांच अगर यह .js है, ब्राउज़रों खुश करने के लिए उपयुक्त MIME प्रकार निर्धारित किया है।

संपादित करें: मामले में यह शुद्ध नोड है, एक्सप्रेस के बिना, यहाँ देखो: http://nodejs.org/api/http.html#http_response_setheader_name_value

+0

हाँ, शुद्ध नोड, कोई एक्सप्रेस नहीं। – corazza

+1

ठीक है, केवल एक ही टुकड़ा गुम है जो आपके लिए MIME प्रकार की स्क्रिप्ट का पता लगाने के लिए है, जिसे आप प्रत्येक प्रतिक्रिया के लिए सही शीर्षलेख में पॉप करते हैं। – rdrey

+0

हो गया, मेरा जवाब देखें। :) – corazza

0

मैं अपने हैंडलर समारोह का उपयोग कर समस्या नहीं थी क्योंकि convertURL और okURL कार्यों जहां परिभाषित नहीं। मैं एक छोटे से कोड में संशोधन किया और इस

function handler(req, res) 
{ 
    // /home/juan/Documentos/push-api-demo is the path of the root directory of the server 
    var url    = '/home/juan/Documentos/push-api-demo' + req.url; 
    var file_exists  = fs.existsSync(url); 

    if (file_exists) 
    { 
     fs.readFile(url, function(err, data) 
     { 
      if (err) 
      { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      res.setHeader("Content-Type", mime.lookup(url)); 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } 
    else 
    { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 
0

mime.lookup() की तरह लग रही समाप्त अब mime.getType() नाम दिया गया है। तो आप ऐसा कर सकते हैं:

res.set('Content-Type', mime.getType('path/file'));