এক্সপ্রেসে অ্যাপ.ইউজ () এবং রাউটার.উজ () এর মধ্যে পার্থক্য


92

আমি কেবল এক্সপ্রেসে ডকুমেন্টেশন পড়ছিলাম এবং এই দুটি শব্দটি পেয়েছি app.use();এবংrouter.use();

আমি জানি যে কোনও পথে মিডওয়্যারটি মাউন্ট করারapp.use(); জন্য নোডে ব্যবহৃত হয় এবং আমরা প্রায়শই নোড অ্যাপ্লিকেশনগুলিতে ব্যবহার করি। তবে এরা দু'টি কী? না হলে পার্থক্য কী?router.use();

আমি এখানে রাউটার সম্পর্কে পড়েছি । আমি এসও তে অনুরূপ প্রশ্নগুলিও পেয়েছি "এক্সপ্রেস.রোউটার" এবং "অ্যাপ.জেট" ব্যবহার করে রাউটিংয়ের মধ্যে পার্থক্য কী? এবং অ্যাপ্লিকেশন.এল ('*') এবং অ্যাপ.ইউজ ('/') এর মধ্যে পার্থক্য রয়েছে , তবে তারা সত্যই আমার প্রশ্নের উত্তর দেয় না। ধন্যবাদ

উত্তর:


126

router.getকেবলমাত্র সাবপাথগুলি সংজ্ঞায়িত করার জন্য। এই উদাহরণ বিবেচনা করুন:

var router = express.Router();

app.use('/first', router); // Mount the router as middleware at path /first

router.get('/sud', smaller);

router.get('/user', bigger);
  • আপনি যদি প্রথম / সুড খুলেন তবে smallerফাংশনটি কল হয়ে যাবে।
  • আপনি যদি প্রথম / ব্যবহারকারী খুলেন তবে biggerফাংশনটি কল হয়ে যাবে।

সংক্ষেপে, app.use('/first', router)মিডলওয়্যারটিকে পথে / প্রথম দিকে মাউন্ট করে , তারপরে router.getসাবপাথটি সেট করে।


তবে যদি আমরা পরিবর্তে নিম্নলিখিতটি ব্যবহার করি:

app.use('/first', fun);

app.get('/sud', bigger);

app.get('/user', smaller);
  • আপনি যদি আপনার ব্রাউজারে / প্রথম খোলেন , কল funহবে,
  • জন্য / সুড , কল করা biggerহবে
  • জন্য / ব্যবহারকারী , smallerবলা হবে

তবে মনে রাখবেন / প্রথম / সুদের জন্য , কোনও ফাংশন কল করা হবে না।

এই লিঙ্কটিও সহায়তা করতে পারে: http://expressjs.com/api.html#router


আমি আমার উত্তরটি সম্পাদনা করেছি @ নাeম শাইখ প্লিজের একটি দৃষ্টিভঙ্গি রয়েছে।
সুধাংশু গৌড়

4
আপনি যখন অ্যাপ যেতে পারেন তবে রাউটার কেন ব্যবহার করবেন use ব্যবহার করুন ('/ ফার্স্ট / সুড' ছোট); এবং অ্যাপ.উইস ('/ প্রথম / ব্যবহারকারী', আরও বড়)? আমার অর্থ তারা কি রাউটার তৈরি করেছে যাতে আমাদের প্রথম প্যারামিটারে অতিরিক্ত জিনিস টাইপ করতে না হয়?
mskw

দুর্দান্ত প্রশ্ন দেখুন আমি এটিকে সঠিকভাবে জানি না তবে আমার মনে হয় এটি সেই জিনিসটি যা ইউআরএলগুলিতে ডাইক্র্যাক্টিংয়ের জন্য আসলে তৈরি করা হয়েছিল যেখানে অ্যাপ্লিকেশনটি মিডলওয়্যারের জন্য তৈরি করা হয়েছে এখন আপনি ব্যবহারের জন্য ব্যবহার করতে পারেন ('/ প্রথম / সুড', ছোট); তবে ধরুন আপনার অ্যাপে / প্রথম / দ্বিতীয় / তৃতীয়া / চতুর্থ হিসাবে শুরু করার সাথে আপনার অনেকগুলি রুট রয়েছে এখন আপনি এখানে প্রতিটি রুট তৈরি করবেন / প্রথম / দ্বিতীয় / তৃতীয়া / চতুর্থ / এক্স, আপনি এখানে রাউটার ব্যবহার করবেন না, উভয়ই দুর্দান্ত তবে রাউটারের কাজ মনে রাখবেন ঠিক এই url এর উদ্দেশ্যে তৈরি করা হয়েছিল
সুধাংশু গৌড়

সুতরাং, এর অর্থ আমরা ব্যবহার করে বাসা বাঁধতে পারি না router। আমরা কেবল এর মাধ্যমেই করতে পারি app। এটা কি ঠিক?
মিঃ_পরিফেক্ট

4
ওপি কেন router.useএই বিষয়ে জিজ্ঞাসা করে তবে এই উত্তরটি উল্লেখ করে প্রতিক্রিয়া জানায় router.get?
টিম হিলম্যান

74

router.use();নির্দিষ্ট রাউটার দ্বারা প্রদত্ত app.use();রুটের জন্য মিডলওয়্যারকে মাউন্ট করে, অ্যাপ্লিকেশনটির সমস্ত রুটের জন্য মিডলওয়্যার মাউন্ট করে (বা যদি আপনি ব্যবহার করেন তবে নির্দিষ্ট রুটের সাথে মেলে app.use('/ANYROUTESHERE', yourMiddleware());)।

উদাহরণ ব্যবহারের ক্ষেত্রে স্ট্যান্ডার্ড রুট সহ একটি রাউটার এবং এপিআই রুট পরিচালনা করে এমন একটি রাউটার সহ একটি অ্যাপ্লিকেশন হতে পারে, যার জন্য কোনও বৈধ ব্যবহারকারীর প্রয়োজন।

তারপরে আপনি কেবল এপিআই রাউটারের সাথে প্রমাণীকরণ মিডলওয়্যারটি মাউন্ট করতে পারেন router.use(yourAuthMiddleware());

আপনার যদি এমন অ্যাপ্লিকেশন থাকে যদিও এর জন্য সমস্ত রুটের জন্য বৈধ ব্যবহারকারীর প্রয়োজন হয় তবে অ্যাপ্লিকেশনটির জন্য মিডলওয়্যারটি মাউন্ট করুন app.use(yourAuthMiddleware());


আমি কি নতুন রাউটার তৈরি করতে পারি এবং তারপরে useএটি অন্য রাউটারে তৈরি করতে পারি ? লাইকrouter1.use('/path', router2);
কোডিবাগস্টাইন

6
এই উত্তরটি স্পষ্ট এবং গ্রহণযোগ্য উত্তর হওয়া উচিত। অ্যাপ্লিকেশন আরও উপযুক্ত হবে যেখানে রাউটার প্রায়শই অপব্যবহার করা হয়।
আতুরস্যামস

1

অ্যাপ.ইউজ () নির্দিষ্ট পথে মিডলওয়্যার ফাংশন বা ফাংশন মাউন্ট করতে ব্যবহৃত হয়, যখন অনুরোধকৃত পথটির ভিত্তি পাথের সাথে মেলে মিডলওয়্যার ফাংশনটি কার্যকর করা হয়।

রাউটার.ইউজ () মিডলওয়্যার ফাংশন বা ফাংশনগুলিতে ব্যবহৃত হয়, ডিফল্টগুলি মাউন্ট পাথ "/" তে যায়।

তবে অ্যাপ্লিকেশনটিতে (ইউএস) আপনাকে অবশ্যই একটি নির্দিষ্ট পথ দিতে হবে:

 var adsRouter = require('./adsRouter.js');
    app.use('/ads', adsRouter);

বা

app.use('/ads', function(req, res, next) {

  // write your callback code here.

    });

তবে রাউটার.উজ () ব্যবহার করার সময় আপনি কেবল মিডলওয়্যার দিতে পারেন:

router.use(function(req, res, next) {
  console.log('%s %s %s', req.method, req.url, req.path);
  next();
});

বা

router.use('/test', function(req, res, next) {
  // write your callback code here.
  next();
});

বা

//in router.js

router.use('/admin', authUtil.verifySessionId, authUtil.verifyLisencee);
router.post('/admin', controllerIndex.ads.adListingAdmin);

উপরের কোডে যখন শেষ পয়েন্টটি '/ অ্যাডমিন' হয় তারপরে প্রথমে এটি authUtil.verifySessionId এবং authUtil.verifyLisencee কল করবে তারপর এটি 'অ্যাডমিন' শেষ পয়েন্ট সহ পরবর্তী লাইনটি কার্যকর করবে এবং কন্ট্রোলার ইন্ডেক্স.এড.এললিস্টিংএডমিন পদ্ধতি অনুসারে।


4
আপনি app.useযদি অ্যাপ্লিকেশনটিতে করা প্রতিটি অনুরোধের জন্য ফাংশনটি সম্পাদন করতে চান তবে কোনও পাথ সরবরাহ করার প্রয়োজন নেই ।
jacefarm

@ শুভম আপনি খুব ভাল ব্যাখ্যা করেছেন এবং এটি আমার পক্ষে খুব সহায়ক ছিল। মিডলওয়্যারের সাথে রাউটারের ক্ষেত্রে আমরা এটিকে রাউটার.ডিলেট ("/: আইডি / মুছুন", মিডলওয়্যার.সেকটোকেন, ব্যবহারকারীকন্ট্রোলার.ডিলেট ইউজার) এর মতো একক লাইনেও একত্রী করতে পারি
সৌরভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.