2013-12-16 13 views
5

के साथ इस्तेमाल किया जब मैं अपने अन्य सभी मार्गों के साथ ही इस मार्ग का उपयोग मान्यता प्राप्त नहीं, कि स्टैटिक फ़ाइलें अच्छी तरह से सेवा की है:Node.js/Expess.js। स्टेटिक रूटर है जो वाइल्डकार्ड रूटर

var public_dir = path.join(__dirname, 'public'); 
app.use('/public', express.static(public_dir)); 

लेकिन जब मैं इन पंक्तियों के नीचे जोड़ने - सभी अनुरोधों को इस के साथ पकड़ कर रहे हैं रूटर (नहीं पिछले एक):

app.get('/*', function(req, res){ 
    res.redirect('/#!' + req.path); 
}); 

यह क्योंकि /public परिभाषा पहले आता है, मेरे लिए अजीब बात है। लेकिन सभी अनुरोध अंतिम /* अनुरोध हैंडलर को परिभाषित करने के लिए जाते हैं।

अब, यदि मैं पृष्ठ http://127.0.0.1:3000/public/website/application.js खोलने का प्रयास करता हूं तो मैं http://127.0.0.1:3000/#!/public/website/application.js पर रीडायरेक्ट हो जाता हूं। ऐसा क्यों होता है, और इस स्थिति को सर्वोत्तम तरीके से कैसे हल किया जाए?

बहुत बहुत धन्यवाद!


समाधान सरल है। मैं midwares की सूची में काम कथन नहीं कर रहा है।

app.use(app.router); 

यह वह जगह है यूआरएल मार्ग की एक समस्या पैदा करता है। लेकिन यह अजीब बात है कि node.js ने मुझे मिडलवेयर के "गलत सेटअप" के बारे में नहीं बताया।

+1

पर आप पहली बार और app.get साथ app.use उपयोग कर रहे हैं दूसरे के साथ ..? – DrCord

+1

@DrCord के रूप में उल्लेख किया गया है, ऐप। [Get | post | put | etc] विधियों को राउटर में जोड़ा जाता है। इसलिए, यदि आप पहले अपने राउटर को माउंट करते हैं, तो इसका पहले उपयोग किया जाएगा। –

+0

निक की तरह राउटर की स्थिति और स्थैतिक निर्णय प्राथमिकता की तरह। कृपया दिखाएं कि आप राउटर और स्थिर (रिश्तेदार पदों) का उपयोग कैसे करते हैं। – user568109

उत्तर

4

आपके कोड में कुछ भी गलत नहीं है लेकिन ध्यान रखें कि जो कुछ भी मौजूद नहीं है उस पर कोई अनुरोध आपके प्राप्त ('/ *', ...) से पकड़ा जाएगा।

यह कहा, तुम /public पर public_dir लोड कि के मतलब अगर public_dirpublic/website/ के रूप में परिभाषित किया गया है जब आप किसी फ़ाइल तक पहुँचने के लिए http://127.0.0.1:3000/public/application.js क्या करना है पता लगाने /public/website/application.js

+0

हाँ, आपको सार्वजनिक फ़ोल्डर में फ़ाइलों के लिए अपने पथ में सार्वजनिक शामिल नहीं करना चाहिए ... – DrCord

+0

मैंने नीचे अपना कोड अपडेट किया है। मैंने 'सार्वजनिक निर्देशिका' पर नेविगेट करने के लिए '/ public' का उपयोग किया जहां मेरे पास कुछ उपनिर्देशिकाएं हैं (' वेबसाइट' सहित)। जब मैं 'app.get ('/ *', ...) 'परिभाषा को हटा देता हूं तो मैं ब्राउज़र में अपनी स्थिर फ़ाइल देखता हूं। –

+0

यह अजीब बात है, कुछ और बातचीत करनी चाहिए। मैंने यहां https://github.com/BaNzounet/so-express को फिर से बनाया है जो आपने वर्णित किया है, और यह काम करता है। – BaNz

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