में अनुप्रयोग रूट के सापेक्ष फ़ाइलों को संदर्भित करने का उचित तरीका मेरे पास एक Node.JS एप्लिकेशन है जो एडब्ल्यूएस ईसी 2 पर लिनक्स पर चल रहा है जो HTML टेम्पलेट फ़ाइलों में पढ़ने के लिए fs मॉड्यूल का उपयोग करता है।Node.JS
/server.js
/templates/my-template.html
/services/template-reading-service.js
एचटीएमएल टेम्पलेट्स हमेशा उस स्थान में हो जाएगा, हालांकि, टेम्पलेट पढ़ने-सेवा भर के विभिन्न स्थानों में जा सकते हैं (गहरी उपनिर्देशिका, आदि) के भीतर से: यहाँ आवेदन की वर्तमान संरचना है टेम्पलेट पढ़ने-सेवा मैं तो जैसे फ़ाइल को लोड करने, fs.readFileSync() का उपयोग करें:
Error: ENOENT, no such file or directory './templates/my-template.html'
मैं था संभालने हूँ:
var templateContent = fs.readFileSync('./templates/my-template.html', 'utf8');
यह निम्न त्रुटि फेंकता टी इसलिए है क्योंकि पथ './' '/ services /' निर्देशिका में हल हो रहा है, न कि अनुप्रयोग रूट। मैंने '../templates/my-template.html' के पथ को बदलने का भी प्रयास किया है और यह काम करता है, लेकिन यह भंगुर लगता है क्योंकि मुझे लगता है कि 'केवल एक निर्देशिका' के सापेक्ष हल हो रहा है। यदि मैं टेम्पलेट-रीडिंग-सेवा को गहरी उपनिर्देशिका में ले जाता हूं, तो वह पथ टूट जाएगा।
तो, आवेदन की जड़ से संबंधित फ़ाइलों का संदर्भ देने का सही तरीका क्या है?
क्या वास्तव में __dirname वर्तमान स्क्रिप्ट/मॉड्यूल कहां है? तो मेरे उदाहरण में, 'टेम्पलेट-रीडिंग-सर्विस' के भीतर से निष्पादित करते समय।जेएस '__dirname'/सेवाओं/'को हल नहीं करेगा? – user1438940
@ user1438940 मैंने सोचा कि आप '/ server.js' में फ़ाइल पढ़ने कोड निष्पादित करते हैं। "../templates/my-template.html" – InspiredJW
नहीं आज़माएं, fs.getFileSync निष्पादित कोड "टेम्पलेट-रीडिंग-service.js" में है। मैं "../" का उपयोग नहीं करना चाहता; यह मेरे प्रश्न का पूरा बिंदु है। अगर मैं "../" का उपयोग करता हूं और बाद में मैं "/ services /" निर्देशिका से "टेम्पलेट-रीडिंग-सर्विस.जेएस" को "/ services/templating /" पर ले जाता हूं तो मेरे सभी कोड ब्रेक होते हैं। या, यदि मैं वैश्विक कॉन्फ़िगरेशन में सेटिंग के रूप में टेम्पलेट निर्देशिका का पथ रखना चाहता हूं, तो इसका उपयोग 20 अलग-अलग अन्य सेवाओं द्वारा किया जाएगा, जो सभी निर्देशिका संरचना में विभिन्न स्थानों पर स्थित हैं, फिर "../" नहीं होगा हर जगह से काम – user1438940