2013-06-03 5 views
12

मैं इसे विस्तारित किए बिना एक HTML फ़ाइल सेवा करना चाहता हूं। क्या कोई रास्ता तय करने के बिना मैं ऐसा कर सकता हूं?एक्सटेंशन के बिना एक्सप्रेस से स्थिर एचटीएमएल फाइलों को सेवा देने का कोई तरीका?

/helloworld.html 

के बजाय उदाहरण के लिए मुझे क्या करना चाहते हैं बस

/helloworld 

उत्तर

16

एक quick'n'dirty समाधान अनुरोध से में एक अवधि की जरूरत नहीं है करने के लिए और जो एक के लिए .html संलग्न करने के लिए है एचटीएमएल फाइल सार्वजनिक निर्देशिका में मौजूद है:

var fs  = require('fs'); 
var publicdir = __dirname + '/public'; 

app.use(function(req, res, next) { 
    if (req.path.indexOf('.') === -1) { 
    var file = publicdir + req.path + '.html'; 
    fs.exists(file, function(exists) { 
     if (exists) 
     req.url += '.html'; 
     next(); 
    }); 
    } 
    else 
    next(); 
}); 
app.use(express.static(publicdir)); 
+0

अच्छा। बस एक प्रश्न। क्या यह सभी सार्वजनिक अनुरोधों को रोक देगा। मान लीजिए कि मैं सार्वजनिक निर्देशिका में एक सीएसएस की सेवा करना चाहता हूं जिसके लिए मैं विस्तार जोड़ूंगा तो क्या यह टूट जाएगा? –

+0

यह केवल उन अनुरोधों पर विचार करेगा जिनके पास उनके फ़ाइल नाम में कोई अवधि नहीं है। इसलिए यदि आप 'सीएसएस' एक्सटेंशन के साथ अपनी सीएसएस फाइलों की सेवा करते हैं, तो कोई समस्या नहीं होनी चाहिए (लेकिन यह पहले '.html' फ़ाइल के अस्तित्व की जांच करता है, अगर यह अस्तित्व में नहीं है तो यह कुछ भी नहीं करेगा और स्थैतिक मिडलवेयर इसे इस तरह से संभालने दें)। – robertklep

3

जबकि रॉबर्ट का जवाब अधिक सुरुचिपूर्ण है, ऐसा करने का एक और तरीका है। मैं सिर्फ पूर्णता के लिए यह जवाब जोड़ रहा हूं। विस्तार के बिना स्थैतिक फ़ाइलों को सेवा देने के लिए आप उस मार्ग के नाम के साथ एक फ़ोल्डर बना सकते हैं जिसके खिलाफ आप सेवा करना चाहते हैं और उसके बाद index.html फ़ाइल बनाएं।

अगर मैं hello.html/hello पर सेवा करना चाहता हूं तो अपना खुद का उदाहरण लेना। मैं hello नामक एक निर्देशिका तैयार करूंगा और इसमें index.html फ़ाइल डालूंगा। अब जब '/ हैलो' एक्सप्रेस कहा जाता है तो एक्सटेंशन के बिना स्वचालित रूप से इस फ़ाइल को सेवा देगा।

स्पष्ट रूप से यह सभी वेब ढांचे द्वारा समर्थित है लेकिन मुझे इसे वापस याद आया।

24

आप एक्सप्रेस.स्टैटिक विधि में केवल एक्सटेंशन विकल्प का उपयोग कर सकते हैं।

app.use(express.static(path.join(__dirname, 'public'),{index:false,extensions:['html']})); 
+2

यह स्वीकार्य उत्तर होना चाहिए;) – IcanDivideBy0

+0

यह समाधान अधिक संक्षिप्त और सुरुचिपूर्ण है, धन्यवाद। – phippu

+0

महान उत्तर दाई –

0

आप की तरह मैं था (एक HTML एचटीएमएल के रूप में "HelloWorld" कहा जाता है फ़ाइल की सेवा) रिवर्स रास्ता तय करने के लिए इस मिडलवेयर मैं प्रयोग किया जाता है चाहते हैं।

var express = require('express'); 
var app = express(); 

app.use(function(req, res, next) { 
    if (req.path.indexOf('.') === -1) { 
    res.setHeader('Content-Type', 'text/html'); 
    } 
    next(); 
}); 

app.use('/', express.static(__dirname + '/public')); 

app.listen(8080, function() { 
    console.log('App listening on port 8080!'); 
}) 
संबंधित मुद्दे