2013-05-14 6 views
5

मैं node.js के साथ एक नौसिखिया हूं और ईजेएस लेआउट के साथ एक्सप्रेस का उपयोग कर रहा हूं, और मैं जानना चाहता हूं कि पृष्ठ डालने पर .html एक्सटेंशन से कैसे छुटकारा पाना है। उदाहरण के लिए यदि मैं अपने लोकहोस्ट पर जाता हूं: 3000/about.html - यह काम करता है लेकिन मैं इसे बस के बारे में दिखाना चाहता हूं। इसके अलावा, अगर कोई जानता है कि एक्सप्रेस डिफ़ॉल्ट से इसे कैसे बदला जाए तो फेविकॉन को कैसे बदला जाए, यह समझने में परेशानी हो रही है।node.js के साथ वेबपृष्ठों की सेवा करते समय .html एक्सटेंशन से छुटकारा पाने के लिए कैसे?

कोई भी मदद बहुत धन्यवाद होगी।

+0

ओह क्षमा करें, और मैं अभी भी उलझन में हूं कि इंडेक्स पेज को कैसे बदला जाए। –

+1

आपको अपने एप्लिकेशन की रूटिंग सेट करने की आवश्यकता है, http://stackoverflow.com/questions/9474951/routing-with-express-js – Swordfish0321

उत्तर

-1

मैंने इसे समझ लिया। मैंने इस पोस्ट को Render basic HTML view? पर देखा जो मेरी समस्या को हल करता था।

app.engine('html', require('ejs').renderFile);  

app.get('/', function(req, res){ 
    res.render("index.html"); 
}); 

और यह सब app.js या जो भी फ़ाइल आप चल रहे हैं में जाता है।

+0

देखें मुझे यकीन है कि आप उपरोक्त कोड में .html भी हटा सकते हैं। – Costa

+0

आपको .html होना चाहिए, कम से कम जब मैंने इसे हटा लिया तो यह मेरे लिए लोड नहीं हुआ और यह गलत हो गया। –

+0

यह ठीक काम करेगा लेकिन जब आपके पास बहुत सारे पृष्ठ हों तो यह अच्छी तरह से स्केल नहीं करेगा। एक्सप्रेस.स्टैटिक मिडलवेयर का उपयोग करने के लिए एक बेहतर तरीका है (ऊपर मेरा जवाब देखें)। –

0

फेविकॉन मुद्दा आम तौर पर एक कैशिंग समस्या है। जब तक आप अपने आधार एचटीएमएल लेआउट में इस कोड है:

<link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico"> 

तो बस जहाँ भी उस छवि को अपने ब्राउज़र के साथ है करने के लिए नेविगेट, और कहा कि अद्यतन करने के लिए अपने कैश के लिए मजबूर करना चाहिए।

+0

मैं यहां एक्सप्रेस.जेएस वीडियो की अत्यधिक अनुशंसा करता हूं: https://www.youtube.com/watch?v=eD2I0zAjM5g मेरे पैरों को बहुत गीला करने के बाद मुझे भारी, विशाल, बड़ी मदद मिली और मुझे एक गंभीर गंभीर समझ प्राप्त करने की आवश्यकता थी ढांचे का। – Costa

+0

हाँ, फेविकॉन इसे कैश से हटाकर तय किया गया था। –

+0

महान यूट्यूब वीडियो! –

7

(मुझे पता है इस सवाल का वर्ष है, लेकिन यह Google खोज परिणामों में उच्च प्रकट होता है, और स्वीकार किए जाते हैं जवाब सबसे अच्छा समाधान नहीं है।)

express.js में स्थिर सामग्री ऊपर की सेवा के लिए सबसे अच्छा समाधानexpress.static है। यूआरएल में फ़ाइल एक्सटेंशन निर्दिष्ट करने के लिए आपको लगता है कि यह जब स्थिर फ़ाइलों के लिए खोज का उपयोग करेगा डिफ़ॉल्ट फ़ाइल एक्सटेंशन की सूची के साथ कॉन्फ़िगर कर सकते हैं से बचने के लिए:

app.use(express.static(pathToBaseFolderOfStaticContent, { 
    extensions: ['html', 'htm'], 
    ... // Other options here 
})); 

यह pathToBaseFolderOfStaticContent/somePage.html या तक प्रस्तुत कर देगा http://www.example.com/somePage पर जीईटी अनुरोध के जवाब में pathToBaseFolderOfStaticContent/somePage.htm, जो आप चाहते हैं। उदाहरण के लिए, यदि आप https://arcade.ly/star-castle पर जाते हैं, तो यह फ़ाइल केवल एक स्थिर फ़ाइल है जिसे स्टार-castle.html कहा जाता है। मुझे इस, या किसी अन्य स्थिर फ़ाइल के लिए कोई विशेष रूटिंग नहीं जोड़नी पड़ी - यह सब सिर्फ एक्सप्रेस.स्टैटिक द्वारा संभाला गया है।

मुझे केवल उस सामग्री के लिए विशिष्ट मार्ग जोड़ने की आवश्यकता है जिसके लिए सर्वर पर सक्रिय कार्य की आवश्यकता होती है। यहां एक बड़ा फायदा यह है कि मैं अपनी अधिक सामग्री को कैश करने के लिए सीडीएन का उपयोग कर सकता हूं (या nginx अगर मैं व्यवसाय ऐप की आंतरिक रेखा चला रहा था), इस प्रकार मेरे सर्वर पर लोड कम हो जाता है।

आप जितनी चाहें उतनी डिफ़ॉल्ट फ़ाइल एक्सटेंशन को स्पष्ट रूप से कॉन्फ़िगर कर सकते हैं, हालांकि मैं सूची को छोटा रखना चाहता हूं। मैं केवल उन संसाधनों के लिए उपयोग करता हूं जहां यूआरएल पता बार में प्रकट होने की संभावना है, जिसका आमतौर पर एचटीएमएल फाइलों का मतलब है, हालांकि हमेशा नहीं।

यह In express what is the common way to associate a default file extension with static content requests? पर भी उत्तर दिया गया है।

favicon.ico मुद्दा जिसमें से आप स्थैतिक सामग्री की सेवा रूट फ़ोल्डर में अपने फ़ेविकॉन छोड़ने, साथ ही लागू करने + कोस्टा समाधान जहां इसे संदर्भ अपने दस्तावेज़ों के <head> में एक <link> का उपयोग करके हल किया जा सकता।

सिद्धांत में आपको रूट फ़ोल्डर में फेविकॉन डालने की आवश्यकता नहीं है, लेकिन व्यावहारिक रूप से, कुछ ब्राउज़र अभी भी साइट रूट से इसके लिए पूछेंगे, भले ही इसे आपके दस्तावेज़ के <head> में संदर्भित किया गया हो। यह एक नकली 404 त्रुटि की ओर जाता है जिसे आप क्लाइंट साइड डीबगिंग टूल (उदाहरण के लिए, क्रोम देव टूल्स) में देख पाएंगे।

+0

यदि मेरा http सर्वर डिफ़ॉल्ट पोर्ट 80 पर कॉन्फ़िगर किया गया है तो जेएस स्क्रिप्ट कैसे काम करेगी? मेरी समझ यह है कि मुझे 'app.listen (80)' जैसे पोर्ट 80 पर एक्सप्रेस 'app.listen' चलाने की आवश्यकता है, लेकिन क्या यह नोड एप्लिकेशन गैर रूट उपयोगकर्ता के रूप में चलाने के लिए संभव है? क्या कोई और तरीका है? – Annjawn

+0

या रिवर्स प्रॉक्सी एकमात्र समाधान है? – Annjawn

+0

हाय @ एंजजॉन - मैं अपने ऐप को पोर्ट्स 80 और 443 पर सुनने की अनुमति देने के लिए एक सेवा के रूप में चलाता हूं। मैंने उबंटू पर सेटअप का वर्णन करने के लिए एक पोस्ट लिखा: https://arcade.ly/blog/2017/01/21/running -एक-NodeJS एप्लिकेशन के रूप में एक सेवा-ऑन-ubuntu /। उम्मीद है की वो मदद करदे। –

संबंधित मुद्दे

 संबंधित मुद्दे