2012-07-13 7 views
34

मैं पहले से ही देखा है और का इस्तेमाल किया है:node.js, express.js - एक स्थिर फ़ाइल की सेवा करने का सबसे आसान तरीका क्या है?

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

मैं रूट निर्देशिका, केवल एक एकल फाइल, 'ipad.htm' से सभी फाइलों की सेवा करने की इच्छा नहीं। Express.js का उपयोग करके न्यूनतम मात्रा में कोड के साथ ऐसा करने का सबसे अच्छा तरीका क्या है?

उत्तर

-3
fs.createReadStream(path).pipe(res); 
+2

आपको कम से कम 'सामग्री-प्रकार' और 'सामग्री-लंबाई' शीर्षलेखों को स्पष्ट रूप से लिखना होगा। – ebohlman

+0

प्लस, GZip संपीड़न इस के साथ काम नहीं करेगा। –

68

res.sendFile(path_to_file); आपको बस इतना चाहिए; यह स्वचालित रूप से सही शीर्षलेख सेट करेगा और फ़ाइल को स्थानांतरित करेगा (यह आंतरिक रूप से उसी कोड का उपयोग करता है जैसे express.static)।

+1

इस बारे में एक घंटे के लिए खोज रहे थे .... यह वही है जो मुझे चाहिए। धन्यवाद! –

+4

मुझे इससे 403 मिल रहा था। मुझे 'res.sendfile (सापेक्षपाथ, {रूट: theDirectory}) ' – kumar303

+2

करना था यदि आपका फ़ोल्डर चल रहे जेएस फ़ाइल में से एक के बाहर है, तो मैं @ kumar303 टिप्पणी में कुछ विवरण जोड़ूंगा: आप" ../ "नहीं डाल सकते सापेक्षपाथ में, लेकिन आप इसे निर्देशिका में जोड़ सकते हैं। res.sendfile (pic.png, {root: __dirname + "../../../ images /"}) – Rayjax

4
app.use("/css/myfile.css", express.static(__dirname + '/css/myfile.css')); 
+0

'app.use ("/", express.static (__ dirname +" /index.html ") के पक्ष में बहिष्कृत कर दिया गया है) 'मेरे लिए 404 देता है। 'app.use ("/", express.static (__ dirname)) 'काम करता है। – Niklas

+1

जो अजीब है, यह मेरे लिए काम करता है। मेरे पास app.use है ('/', express.static (__ dirname + '/wwwroot/index.html')); मुझे लगता है कि जिस क्रम में वे app.use कॉल प्रकट करते हैं, वह एक फर्क पड़ता है। तो सुनिश्चित करें कि आप इसे कहीं और मैपिंग नहीं कर रहे हैं जो 404 दे रहा है। –

+2

मुझे कुछ अजीब 303 व्यवहार मिलता है जो पथ और स्लैश को निर्देशित करता है। लगता है कि स्थिर केवल डीआईआरएस पर काम करना चाहिए। –

2

मैं एक छोटा सा पुस्तकालय प्रकाशित एक स्थिर फ़ाइलों की सेवा के लिए: https://www.npmjs.com/package/connect-static-file

npm install connect-static-file

var staticFile = require('connect-static-file'); app.use('/ipad', staticFile(__dirname + '/ipad.html'));

express.static साथ मुख्य अंतर यह है कि इसके बारे में अनुरोध यूआरएल की परवाह नहीं करता मार्ग से मेल खाने पर यह हमेशा उस फाइल परोसता है। यदि आप अपनी निर्देशिका "ipad.html" नाम देते हैं तो यह अचानक पूरी निर्देशिका की सेवा शुरू नहीं करता है।

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