এক্সপ্রেস.জেএস সহ স্থির ফাইল


213

আমি স্থিতিশীল ফাইল হিসাবে পরিবেশন করতে index.htmlএবং /mediaউপ-ডিরেক্টরিতে চাই । সূচি ফাইলটি URL /index.htmlএবং /URL উভয়ই পরিবেশন করা উচিত ।

আমার আছে

web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));

তবে দ্বিতীয় লাইনটি দৃশ্যত পুরোটিকে পরিবেশন করে __dirname, এতে সমস্ত ফাইল (কেবল index.htmlএবং নয় media) সহ, যা আমি চাই না।

আমিও চেষ্টা করেছি

web_server.use("/", express.static(__dirname + '/index.html'));

তবে বেস ইউআরএল অ্যাক্সেস করার /পরে একটি অনুরোধ বাড়ে web_server/index.html/index.html(ডাবল index.htmlউপাদান), যা অবশ্যই ব্যর্থ হয়।

কোন ধারনা?


যাইহোক, আমি এক্সপ্রেসে এই বিষয়ে ( static()+ এর প্যারামগুলি) ... হতাশার সাথে একেবারে কোনও ডকুমেন্টেশন পাইনি । একটি ডক লিঙ্কটিও স্বাগত।


2
এক্সপ্রেস ৪.x হিসাবে প্যাকেজ মিডলওয়্যার express.static()দ্বারা পরিচালিত হয় serve-static। আপনি এর নথিগুলি এনএমপিজেএস / প্যাকেজ / রিজার্ভ- স্ট্যাটিক বা github.com/expressjs/serv-static এ খুঁজে পেতে পারেন ।
আনম

কেউ দয়া করে "স্ট্যাটিক ফাইল হিসাবে সার্ভার" এর অর্থ কী ব্যাখ্যা করতে পারেন?
অভি

@iLiveInAPineappleUnderTheSea একটি গতিশীল ওয়েব অ্যাপ্লিকেশন, যেমন এক্সপ্রেস ব্যবহার করার সময়, পৃষ্ঠা বিষয়বস্তু তৈরি করা হয় - বা উত্পন্ন - অ্যাপ্লিকেশন দ্বারা। অন্যদিকে, স্ট্যাটিক ফাইলগুলি (বেশিরভাগ) একটি স্ট্যাটিক ডিরেক্টরি শ্রেণিবদ্ধ থেকে অবিস্মরণিত পরিবেশন করা হয়। উদাহরণস্বরূপ, পৃষ্ঠাগুলি পরিবর্তিত হতে পারে, ইমেজ ফাইল, সিএসএস ফাইল এবং জাভাস্ক্রিপ্ট ফাইলগুলি না।
ফিলিপ কলেন্ডার

উত্তর:


100

express.static()প্রথম প্যারামিটারটি কোনও ফাইলের নাম নয়, ডিরেক্টরিটির পথ হিসাবে প্রত্যাশা করে । আপনার index.htmlএবং এটি ব্যবহারের জন্য আমি অন্য একটি উপ-ডিরেক্টরি তৈরি করার পরামর্শ দেব ।

এক্সপ্রেস ডকুমেন্টেশনে স্ট্যাটিক ফাইলগুলি পরিবেশন করা , বা আরও বিশদ serve-staticডকুমেন্টেশন সহ পরিবেশনার ডিফল্ট আচরণindex.html সহ :

ডিফল্টরূপে এই মডিউল ডিরেক্টরিতে একটি অনুরোধের প্রতিক্রিয়া হিসাবে "index.html" ফাইলগুলি প্রেরণ করবে। এই সেটটিকে মিথ্যা অক্ষম করতে বা পছন্দসই ক্রমে একটি নতুন সূচি পাস স্ট্রিং বা একটি অ্যারে সরবরাহ করতে।


6
এবং কেবল তথ্যের জন্য, এটি অন্য ডিরেক্টরিতে ডিফল্ট অনুসারে সূচক
html

যদি কেবল একটি মাত্র পরামিতি থাকে - তবে express.staticপ্রত্যাশা করে যে সেই পরামিতিটি পথ হবে ....
সেটি

188

আপনার যদি এই সেটআপ থাকে

/app
   /public/index.html
   /media

তারপরে এটি যা চেয়েছিল তা পাওয়া উচিত

var express = require('express');
//var server = express.createServer();
// express.createServer()  is deprecated. 
var server = express(); // better instead
server.configure(function(){
  server.use('/media', express.static(__dirname + '/media'));
  server.use(express.static(__dirname + '/public'));
});

server.listen(3000);

কৌশলটি এই লাইনটিকে শেষ ফলব্যাক হিসাবে ছাড়ছে

  server.use(express.static(__dirname + '/public'));

ডকুমেন্টেশনের ক্ষেত্রে, যেহেতু এক্সপ্রেস কানেক্ট মিডলওয়্যার ব্যবহার করে, তাই সরাসরি সংযোগ উত্সের কোডটি দেখতে কেবল সহজ মনে হয়েছিল।

উদাহরণস্বরূপ এই লাইনটি দেখায় যে সূচি html সমর্থিত https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140


15
Application.configure()3.x তে উত্তরাধিকার হিসাবে নথিভুক্ত করা হয়েছিল এবং 4.x এ সরানো হয়েছিল আপডেট হওয়া উদাহরণের জন্য ক্রিসকন্ট্রেলের উত্তর দেখুন।
আনম

ধন্যবাদ, এটি অনেক সাহায্য করেছে
1

কি __dirname? এর মূল্য কী?
অভি

1
সর্বশেষ এক্সপ্রেসের জন্য পুরানো।
জন হিটার 5

133

এক্সপ্রেসের নতুন সংস্করণে "ক্রিয়েট সার্ভার" অবমূল্যায়ন করা হয়েছে। এই উদাহরণটি আমার পক্ষে কাজ করে:

var express = require('express');
var app = express();
var path = require('path');

//app.use(express.static(__dirname)); // Current directory is root
app.use(express.static(path.join(__dirname, 'public'))); //  "public" off of current is root

app.listen(80);
console.log('Listening on port 80');

__dirname কিওয়ার্ড?
মোহাম্মদ ফায়জান খান

6
এটি আপনার নোডেজ মডিউলে একটি গ্লোবাল। nodejs.org/docs/latest/api/globals.html#globals_dirname
ChrisCantrell

7
__ ডিরেক্টরিটি প্রতিটি মডিউলে আসলে বৈশ্বিক নয় বরং স্থানীয় local
মোহাম্মদ ফায়জান খান

2
আপনি যে পাইথনের __file__সাথে এটি ব্যবহার করেন এটি সমতুল্যos.path.dirname(os.path.realpath(__file__))
আবদেলোহাব

@ ক্রিসক্যান্ট্রেল আমার কাছে ফাইল থাকলে আমি স্ট্যাটিক ফোল্ডারে কীভাবে যুক্ত করতে পারি public/teams/logo.png?
মিশাল

37

res.sendFileএবং express.staticউভয়ই এটির জন্য কাজ করবে

var express = require('express');
var app = express();
var path = require('path');
var public = path.join(__dirname, 'public');

// viewed at http://localhost:8080
app.get('/', function(req, res) {
    res.sendFile(path.join(public, 'index.html'));
});

app.use('/', express.static(public));

app.listen(8080);

publicক্লায়েন্টের পাশের কোডটিতে যে ফোল্ডারটি রয়েছে Where

হিসাবে প্রস্তাব দ্বারা @ATOzTOA এবং দ্বারা ব্যাখ্যা @Vozzie , path.joinআর্গুমেন্ট হিসাবে যোগদানের জন্য পাথ লাগে, +পথ একটি একক যুক্তি প্রেরণ করা হয়।


2
path.joinআর্গুমেন্ট হিসাবে যোগ দিতে পাথগুলি গ্রহণ করে, +একক যুক্তিকে পাথে চলে।
ATOzTOA

@ATOZTOA আপনি আরও ব্যাখ্যা করতে পারেন দয়া করে
মোহাম্মদ জমির

@ATOZTOA যা বলছে তা হ'ল আপনার path.join(public + 'index.html')মধ্যে পরিবর্তিত হওয়া উচিত path.join(public, 'index.html')এবং এটির সময়ে, এতে পরিবর্তন __dirname + "/public/"হওয়া উচিতpath.join(__dirname, 'public')
ভোজি

এটি আমাকে একটি এপিআইয়ের সাথে একটি স্থিতিশীল সাইটের একত্রিত করতে সহায়তা করেছিল
জেফ বিগেলি

4
const path = require('path');

const express = require('express');

const app = new express();
app.use(express.static('/media'));

app.get('/', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'media/page/', 'index.html'));
});

app.listen(4000, () => {
    console.log('App listening on port 4000')
})

2

এনপিএম সার্ভ-ইনডেক্স ইনস্টল করুন

var express    = require('express')
var serveIndex = require('serve-index')
var path = require('path')
var serveStatic = require('serve-static')
var app = express()
var port = process.env.PORT || 3000;
/**for files */
app.use(serveStatic(path.join(__dirname, 'public')));
/**for directory */
app.use('/', express.static('public'), serveIndex('public', {'icons': true}))

// Listen
app.listen(port,  function () {
  console.log('listening on port:',+ port );
})

2

আপনার app.js এর ভিতরে নীচে ব্যবহার করুন

app.use(express.static('folderName'));

(ফোল্ডারনাম ফোল্ডার যা ফাইল রয়েছে) - মনে রাখবেন এই সম্পদগুলি সরাসরি সার্ভারের মাধ্যমে অ্যাক্সেস করা হয়েছে (যেমন HTTP: // লোকালহস্ট: 3000 / abc.png (যেখানে abc.png ফোল্ডারের নাম ফোল্ডারের ভিতরে রয়েছে)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.