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


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.