2011-06-09 13 views
29

Express.js के साथ फ़ाइल/डीआईआर लिस्टिंग को प्रदर्शित करने का कोई तरीका है जैसे apache करता है जब आप उस निर्देशिका के यूआरएल तक पहुंचते हैं जिसमें इंडेक्स फ़ाइल नहीं है - तो यह सभी निर्देशिका सामग्री की एक सूची प्रदर्शित करता है?Express.js - फ़ाइल/डीआईआर लिस्टिंग प्रदर्शित करने का कोई तरीका?

क्या कोई एक्सटेंशन या पैकेज है जो मुझे नहीं जानता है? या मुझे इसे स्वयं कोड करना होगा?

चीयर्स दोस्तों, आप चट्टान! :)

उत्तर

43

निर्देशिका लिस्टिंग के लिए एक नया नया डिफ़ॉल्ट Connect middleware named directory (source) है। इसमें बहुत सी शैली है और इसमें क्लाइंट-साइड सर्च बॉक्स है।

var express = require('express') 
    , app = express.createServer(); 

app.configure(function() { 
    var hourMs = 1000*60*60; 
    app.use(express.static(__dirname + '/public', { maxAge: hourMs })); 
    app.use(express.directory(__dirname + '/public')); 
    app.use(express.errorHandler()); 
}); 

app.listen(8080); 
+2

बहुत अच्छे तरीके से काम किया! वाह! – balupton

+11

मैंने एक संपादन का सुझाव दिया जो मेरी समझ से परे कारणों से खारिज कर दिया गया था। > चूंकि एक्सप्रेस को 3.x 'express.createServer()' को हटा दिया गया है और इसे 'express() 'द्वारा प्रतिस्थापित किया जाना चाहिए। (देखें [बदलें लॉग] (https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x) अधिक जानकारी के लिए) –

+6

निर्देशिका मिडलवेयर विभाजित कर दिया गया है और अब यहां मिला: https://github.com/expressjs/serve-index – gdw2

28

एक्सप्रेस 4.x के रूप में, निर्देशिका मिडलवेयर अब एक्सप्रेस के साथ बंडल नहीं किया गया है। आप एनपीएम मॉड्यूल serve-index डाउनलोड करना चाहेंगे।

फिर, उदाहरण के लिए, एप्लिकेशन videos कहा जाता है की जड़ में फ़ाइल/एक निर्देशिका में dir लिस्टिंग प्रदर्शित करने के लिए विचार करेंगे की तरह:

var serveIndex = require('serve-index'); 

    app.use(express.static(__dirname + "/")) 
    app.use('/videos', serveIndex(__dirname + '/videos')); 
+0

अद्यतित पॉइंटर के लिए धन्यवाद। की सराहना की। –

+0

इसके लिए धन्यवाद। अतिरिक्त प्रश्न, यदि मैं एक फ़ोल्डर (रूट के रूप में) की सेवा कर रहा हूं, तो उपफोल्डर्स के रूप में 2 निर्देशिकाओं (कहीं और स्थित) की सेवा कर रहा हूं, तो वे रूट ब्राउज़ करते समय सूचीबद्ध नहीं होते हैं। वैसे भी इसे ठीक करने के लिए? – ianbeks

+0

सेवा सूचकांक फ़ाइल डाउनलोड करने की अनुमति नहीं देता है, क्या इंडेक्स – ArUn

12

निम्नलिखित कोड दोनों निर्देशिका और फ़ाइलों में काम करेगा

var serveIndex = require('serve-index'); 
app.use('/p', serveIndex(path.join(__dirname, 'public'))); 
app.use('/p', express.static(path.join(__dirname, 'public'))); 
+1

यह कॉल करना एक महत्वपूर्ण बात है! स्वीकार्य उत्तर में यह तुरंत स्पष्ट नहीं है कि फाइलें सुलभ हैं क्योंकि 'ServIndex' रूट स्थैतिक रूट से नीचे है। धन्यवाद! – arichards

+0

इस के साथ अल्फान्यूमेरिकल की बजाय लिस्टिंग कालक्रम को बनाने का कोई तरीका है? – fbence

+0

'servindex' इस अतिरिक्त लाइन के बिना निर्देशिका और फ़ाइलों दोनों को कार्य करता है जहां तक ​​मुझे पता है .. – 1252748

3

यह आपके लिए काम करेगा: (एक्सप्रेस के नए संस्करण को अलग-अलग मिडलवेयर की आवश्यकता है)। जैसे आप 'फ़ाइलों' फ़ोल्डर के अंतर्गत अपनी फ़ाइलें डाल दिया और आप यूआरएल चाहते हैं '/ सार्वजनिक' होने का

var express = require('express'); 
var serveIndex = require('serve-index'); 
var app = express(); 

app.use('/public', serveIndex('files')); // shows you the file list 
app.use('/public', express.static('files')); // serve the actual files 
+0

बहुत अच्छा काम किया, धन्यवाद! आप आइकन के लिए 'ServIndex (' files ', {icons: true}) भी कर सकते हैं। – gkiely

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