নোড.জেএস এক্সপ্রেস ফ্রেমওয়ার্কে দুটি পৃথক স্ট্যাটিক ডিরেক্টরি স্থাপন করা হচ্ছে


101

এটা কি সম্ভব? স্ট্যাটিক ফাইলগুলি পরিবেশন করতে আমি দুটি ভিন্ন ডিরেক্টরি সেট আপ করতে চাই। আসুন বলি / জনসাধারণ এবং / এমএনটি


4
এই পৃষ্ঠাটি বলে মনে হচ্ছে এটি সম্ভব তবে এটির চেয়ে আরও বেশি বিশদে যায় না।
ফাঁস

উত্তর:


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

আপনি যদি আপনার সার্ভারের মূল থেকে বরং আরও যোগ্যতর পথ থেকে স্থিতিশীল ফাইলগুলি পরিবেশন করতে না চান তবে বিটিডব্লিউ এটিও কার্যকর।

এইচটিএইচ


4
পারফেক্ট @ফেসটকাউন্টার! স্রেফ আমার ডিরেক্টরিতে একটি স্ক্রিপ্ট দেখিয়েছি! স্ক্রিপ্ট (src = "/ পাবলিক 2 / সতর্কতা টেস্ট.জেএস")
কোডি

প্রতিক্রিয়া ব্যবহার করে এবং দুটি পৃথক অ্যাপ্লিকেশান সেবা করার চেষ্টা করেন, তাহলে আপনি যোগ করতে হবে "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.jsstatic/এটা সন্ধান করার জন্য অবিরত করবে alternate_static/
রবডাব্লু

4
আপনি যদি ফাইলটি 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 এর জন্য আপডেট

কোডের লিঙ্কগুলি সংযোগ ২.x এর জন্য অকার্যকর, তবে একাধিক স্ট্যাটিক মিডলওয়্যার ব্যবহার এখনও আগের মতোই উপযুক্ত।


1
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

ধন্যবাদ! এটি আমার পক্ষে কাজ করে
অজানা

0

:dirপরিবর্তে ব্যবহার করুন*

যেমন

this.app.use('/:microsite', express.static(path.resolve(process.cwd(), 'client/')))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.