এটা কি সম্ভব? স্ট্যাটিক ফাইলগুলি পরিবেশন করতে আমি দুটি ভিন্ন ডিরেক্টরি সেট আপ করতে চাই। আসুন বলি / জনসাধারণ এবং / এমএনটি
উত্তর:
আপনি পছন্দ করতে অতিরিক্ত (প্রথম) পরামিতি নির্দিষ্ট করে স্ট্যাটিক ফাইলগুলি ওয়েবে যে পথটি দেওয়া হবে সে পথটিও সেট করতে 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।
আপনি যদি আপনার সার্ভারের মূল থেকে বরং আরও যোগ্যতর পথ থেকে স্থিতিশীল ফাইলগুলি পরিবেশন করতে না চান তবে বিটিডব্লিউ এটিও কার্যকর।
এইচটিএইচ
"homepage": "/public"এবং "homepage": "/public2"নিজ নিজ প্রতিক্রিয়া অ্যাপ্লিকেশনের package.json করতে। দুটি প্রতিক্রিয়াশীল অ্যাপ্লিকেশন ব্যবহার সম্পর্কে আরও তথ্যের জন্য আমার উত্তরটি এখানে দেখুন stackoverflow.com/a/48569896/4746648
sharedফোল্ডারের যাতে আপনি ব্যবহার করতে পারেন "./"এবং "./shared"এবং আপনি সহজেই করতে পারেন ভাগ JS ফাইল বুম: 3 আপনাকে ধন্যবাদ
আপনি ডিরেক্টরিগুলি একটি একক দৃশ্যমান ডিরেক্টরিতে "মার্জ" করতে পারেন
ডিরেক্টরি কাঠামো
/static/alternate_staticকোড
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
স্ট্যাটিক এবং বিকল্প_স্ট্যাটিক উভয়ই একই ডিরেক্টরিতে প্রদর্শিত হবে। যদিও ফাইলের নাম ক্লোবারগুলি দেখুন।
main.jsএ static/এটা সন্ধান করার জন্য অবিরত করবে alternate_static/।
alternate_staticসর্বদা পরিবেশন করার প্রত্যাশা করে থাকেন তবে এটি এখনও ক্লোবার ।
এটি একটি মিডলওয়্যার ইনজেকশন দ্বারা সম্ভব নয়, তবে আপনি 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 এর জন্য অকার্যকর, তবে একাধিক স্ট্যাটিক মিডলওয়্যার ব্যবহার এখনও আগের মতোই উপযুক্ত।
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