नोड.जेएस एक्सप्रेस ढांचे में दो अलग-अलग स्थिर निर्देशिकाओं की स्थापना


101

क्या यह संभव है? मैं स्थैतिक फ़ाइलों की सेवा के लिए दो अलग-अलग निर्देशिकाओं को स्थापित करना चाहूंगा। मान लीजिए / सार्वजनिक और / mnt


2
यह पृष्ठ ऐसा लगता है कि यह संभव है, लेकिन इससे अधिक विस्तार में नहीं जाना है।
लीक

जवाबों:


152

आप ऐसा पथ भी सेट कर सकते हैं, जिससे वेब पर स्थिर (पहले) पैरामीटर को निर्दिष्ट करने के लिए स्थिर फ़ाइलों को use()पसंद किया जा सके:

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

इस तरह से आपको वेब पर दो अलग-अलग निर्देशिकाएं मिलती हैं जो आपके स्थानीय निर्देशिकाओं को प्रतिबिंबित करती हैं, न कि एक यूआरएल मार्ग जो दो स्थानीय निर्देशिकाओं के बीच विफल हो जाता है।

दूसरे शब्दों में URL पैटर्न:

http://your.server.com/public/*

स्थानीय निर्देशिका से फ़ाइलें सेवित publicकरते समय:

http://your.server.com/public2/*

स्थानीय निर्देशिका से फ़ाइलें सेवित करता है public2

BTW यह भी उपयोगी है अगर आप अपने सर्वर की जड़ से फ़ाइलों को सेवा करने के लिए स्थिर नहीं करना चाहते हैं, बल्कि एक अधिक योग्य पथ से।

HTH


1
बिल्कुल सही @facetcounter! बस मेरी निर्देशिका के लिए एक स्क्रिप्ट बताया! स्क्रिप्ट (src = "/ public2 / alertTest.js")
कोडी

प्रतिक्रिया का उपयोग कर और दो अलग अलग क्षुधा की सेवा करने की कोशिश कर रहा है, तो आप जोड़ने की जरूरत है "homepage": "/public"और "homepage": "/public2"संबंधित प्रतिक्रिया एप्लिकेशन की package.json करने के लिए। दो प्रतिक्रिया ऐप्स का उपयोग करने के बारे में अधिक जानकारी के लिए मेरा उत्तर यहां देखें stackoverflow.com/a/48569896/4746648
डैनी हार्डिंग

इस विशेष रूप से बहुत उपयोगी है जब आप एक चाहते sharedफ़ोल्डर ताकि आप उपयोग कर सकते हैं "./"और "./shared"और आप आसानी से कर सकते हैं शेयर js फ़ाइलों बूम: 3 धन्यवाद
Jaacko टोरस्र्स

55

आप किसी एकल दृश्य निर्देशिका में "मर्ज" निर्देशिका भी कर सकते हैं

निर्देशिका संरचना

  • /static
  • /alternate_static

कोड

app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));

दोनों स्थिर और वैकल्पिक_स्टैटिक की सेवा की जाएगी जैसे कि वे एक ही निर्देशिका में थे। फ़ाइल नाम क्लोबर्स के लिए बाहर देखो, यद्यपि।


6
अगर मैं सही ढंग से समझता हूं कि फ़ाइल का नाम संघर्ष नहीं होता है, क्योंकि नोड उस फ़ाइल के पहले संस्करण का उपयोग करता है जो इसे पाता है। यदि यह देखता main.jsहै तो static/इसमें देखना जारी नहीं रहेगा alternate_static/
रॉब

2
यदि आप फ़ाइल alternate_staticको कभी भी सेवित होने की अपेक्षा कर रहे थे तो यह अभी भी एक क्लोब है ।
रैंडोल्फो

41

यह एक मिडलवेयर इंजेक्शन द्वारा संभव नहीं है, लेकिन आप staticमिडलवेयर को कई बार इंजेक्ट कर सकते हैं :

app.configure('development', function(){
    app.use(express.static(__dirname + '/public1'));
    app.use(express.static(__dirname + '/public2'));
});

व्याख्या

पर देखो कनेक्ट / lib / मिडलवेयर / static.js # 143 :

path = normalize(join(root, path));

नहीं है options.rootस्थिर जड़ है, जो आप में परिभाषित है express.staticया connect.staticकॉल, और pathअनुरोध मार्ग है।

पर अधिक देखो कनेक्ट / lib / मिडलवेयर / static.js # 154 :

  fs.stat(path, function(err, stat){
    // ignore ENOENT
    if (err) {
      if (fn) return fn(err);
     return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
       ? next()
       : next(err);

पथ केवल एक बार चेक किया गया था, और यदि फ़ाइल नहीं मिली तो अगले मिडलवेयर को पास किया गया अनुरोध।

कनेक्ट 2.x के लिए अद्यतन

कनेक्ट 2.x के लिए कोड के लिंक निष्क्रिय हैं, लेकिन कई स्थिर मिडलवेयर उपयोग अभी भी पहले की तरह ही सकारात्मक हैं।


0
const express = require('express');
const path = require('path');
const pagesPath = path.join(__dirname, '/cheatsheet');
const cssPath = path.join(__dirname, '/stylesheet');
const port = process.env.PORT || 3000;

var app = express();

app.use("/cheatsheet" ,express.static(pagesPath));
app.use("/stylesheet",express.static(cssPath)); 

app.get('/',(request,response)=>{
    response.send('Hello CSS!!!');
  });

app.get('/bad',(request,response)=>{
response.send({error: 'Bad Request'});

});
app.listen(port, ()=> {
console.log(`Server is running on Port ${port}` );
console.log(__dirname);

});

// folder structure
/cheatsheet/index.html
/stylesheet/style.css
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.