এক্সপ্রেস.জেএস - একক লাইনে একাধিক রুটের জন্য একক রাউটিং হ্যান্ডলার


107

একটি একক ফাংশন কল এ করার উপায় আছে?

var todo = function (req, res){};

app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);

কিছুটা এইরকম:

app.get("/", "/blabla", "/blablablabla", todo );

আমি জানি এটি একটি সিনট্যাক্স জগাখিচুড়ি, তবে কেবল আমি কী অর্জন করতে চাই তার ধারণা দেওয়ার জন্য, রুটের একটি অ্যারে দুর্দান্ত হবে!

কেউ কি করতে পারে জানেন?


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

জেএসে রেজেক্সের অভিজ্ঞতা আমার নেই ... অসুস্থ চেষ্টা করে দেখুন ... তবে অন্য কোনও বিকল্প স্বাগত!
অ্যারোনিস মারিয়ানো

1
আমার খুব বেশি কিছু নেই, যা সত্যিই কেন আমি কেবল এটি আপনাকে দিতে পারি নি, তবে আমার বোধগম্যতা হল নিয়মিত প্রকাশগুলি মোটামুটি সর্বজনীন; এক্সপ্রেসের আপনার এক্সপ্রেশনগুলি অন্য কোনও ভাষার মতোই পার্স করা উচিত।
নিক মিচিনসন

1
নিয়মিত প্রকাশগুলি খুব শক্তিশালী এবং অবশ্যই শেখার পক্ষে মূল্যবান। এখানে একটি সমাধান রয়েছে: app.get (/ ^ \ / ((blabla) {0,2})) $ /, ফাংশন (req, resp) {var ম্যাচড = req.params [0]; রেস। সেট ('সামগ্রী- টাইপ করুন ',' পাঠ্য / প্লেইন ')। প্রেরণ করুন ("মিলিত:'" + মিলিত + "'");}); কয়েকটি জিনিস: ১. রিজেক্সের শুরু এবং একটি / দিয়ে শেষ হয়, সুতরাং যে কোনও / অক্ষরকে এড়িয়ে যেতে হবে। ২. চরটি স্ট্রিংয়ের শুরুতে মেলে, $ চর স্ট্রিংয়ের শেষের সাথে মেলে। তাদের ছাড়া ম্যাচটি পথের শুরু বা শেষের দিকে, অর্থাৎ / এক্স / ব্লেব্ল্যাকএক্সএক্সএক্স
জন দেইঘান

উত্তর:


130

একই কার্যকারিতা সন্ধান করতে গিয়ে আমি এই প্রশ্নটি জুড়ে এসেছি।

@ জোনাথন ওং উপরের মন্তব্যে উল্লেখ করেছেন যে পথগুলির জন্য অ্যারে ব্যবহার করা অবমূল্যায়ন করা হয়েছে তবে এটি এক্সপ্রেস ৪ এ স্পষ্টভাবে বর্ণিত হয়েছে এবং এটি এক্সপ্রেস ৩.x এ কাজ করে। এখানে চেষ্টা করার কিছু উদাহরণ রয়েছে:

app.get(
    ['/test', '/alternative', '/barcus*', '/farcus/:farcus/', '/hoop(|la|lapoo|lul)/poo'],
    function ( request, response ) {

    }
);

requestএকটি পথ সহ অবজেক্টের ভিতরে থেকে /hooplul/poo?bandle=froo&bandle=pee&bof=blarg:

"route": {
    "keys": [
        {
            "optional": false, 
            "name": "farcus"
        }
    ], 
    "callbacks": [
        null
    ], 
    "params": [
        null, 
        null, 
        "lul"
    ], 
    "regexp": {}, 
    "path": [
        "/test", 
        "/alternative", 
        "/barcus*", 
        "/farcus/:farcus/", 
        "/hoop(|la|lapoo|lul)/poo"
    ], 
    "method": "get"
}, 

প্যারামগুলির সাথে কী ঘটে তা দ্রষ্টব্য: এটি বর্তমানের অনুরোধে ব্যবহৃত হয়েছে কিনা তা সম্ভাব্য সমস্ত পথে ক্যাপচার গ্রুপ এবং প্যারাম সম্পর্কে অবগত aware

সুতরাং একটি অ্যারের মাধ্যমে একাধিক পাথ স্ট্যাকিং সহজেই করা যায়, তবে আপনি যদি প্যারাম বা ক্যাপচার গ্রুপগুলির মাধ্যমে যে পথটি ব্যবহার করেছিলেন সেখান থেকে দরকারী কোনও কিছু বেছে নেওয়ার প্রত্যাশা করছেন তবে পার্শ্ব-প্রতিক্রিয়াগুলি সম্ভবত অপ্রত্যাশিত। এটি রিডানডেন্সি / এলিয়াসিংয়ের জন্য সম্ভবত আরও কার্যকর, এক্ষেত্রে এটি খুব ভালভাবে কাজ করবে।

সম্পাদনা করুন: দয়া করে নীচে @ সি 24 ডাব্লু এর উত্তরও দেখুন

সম্পাদনা 2: এটি একটি পরিমিত জনপ্রিয় উত্তর। দয়া করে মনে রাখবেন যে এক্সপ্রেসজেএস, বেশিরভাগ নোড.জে লাইব্রেরির মতো, একটি চলমান ভোজ। যদিও উপরের রাউটিংটি এখনও কাজ করে (আমি এই মুহুর্তে এটি ব্যবহার করছি, এটি একটি খুব সহজ বৈশিষ্ট্য), আমি অনুরোধের আউটপুটটির আউটপুট দেওয়ার বিষয়ে কোন প্রমাণ দিতে পারি না (এটি অবশ্যই আমি বর্ণিত থেকে আলাদা)। আপনি পছন্দসই ফলাফল পেতে দয়া করে সাবধানতার সাথে পরীক্ষা করুন test


একটি যাদুমন্ত্র মত কাজ করে. ধন্যবাদ।
অরআসায়াগ

58
app.get('/:var(bla|blabla)?', todo)

:varreq.paramআপনি ব্যবহার করবেন না যে সেট করে । এটি কেবলমাত্র রেজেক্স সেট করতে এই ক্ষেত্রে ব্যবহৃত হয়।

(bla|blabla)রেগেক্সকে ম্যাচে সেট করে, সুতরাং এটি স্ট্রিং blaএবং এর সাথে মেলে blablah

?পুরো রেজেক্সকে alচ্ছিক করে তোলে তাই এটিও মেলে /


1
/bla(bla)?এছাড়াও কাজ করে, তবে কোনও প্যারামিটার সঠিকভাবে পপুলেশন /bla(bla)?/:valueহয় না (অর্থাত্ পপুলেশন হয় না req.params.value)। কেউ জানেন কেন?
joscarsson

যদি আপনার এক্সপ্রেস ব্যবহার করে আপনি তা পেতে পারেন req.params.varতবে আপনাকে নিশ্চিত করতে হবে যে আপনি reqফাংশনে
ম্যাট দ্য নিনজা

51

আপনি যেমন উল্লেখ করেছেন ঠিক তেমনই আপনি প্রকৃতপক্ষে পাথের অ্যারেতে যেতে পারেন এবং এটি দুর্দান্ত কাজ করে:

var a = ['/', '/blabla', '/blablablabla'];
app.get(a, todo);

28
এই হ্রাসের প্রতিস্থাপন কী?
ব্র্যান্ডস্ক্রিপ্ট

5
@ জোনাথন ওং আপনি বলছেন এটি অবনমিত হয়েছে, এবং রিমাস প্রতিস্থাপনটি কী তা জিজ্ঞাসা করছে। আপনি কি তার / তার প্রশ্নের উত্তর দিতে পারেন?
nbro

রাউটার.উউরটে (['/ মেলার / আউট / সিস্টেম', '/ মেলার / আউট / পেমেন্ট']) এক্সপ্রেসে ঠিক কাজ করছে 4 কোন
অবচয়

2
@ জোনাথন ওরে বর্তমান এক্সপ্রেস ভি 4 ডক্সে অ্যারে ব্যবহার করে অবহিত বলে মনে হচ্ছে না।
জেসন অ্যাকসেলসন

32

কেবল কেভিনের উত্তরটি বিশদভাবে জানাতে , এটি 4.x ডক্স থেকে :

মিডওয়্যারের ফাংশনটি যে পথে চলার জন্য; যে কোনও হতে পারে:

  • একটি স্ট্রিং যা কোনও পথকে উপস্থাপন করে।
  • একটি পথ নিদর্শন।
  • পাথের সাথে মেলে একটি নিয়মিত প্রকাশের প্যাটার্ন।
  • উপরের যে কোনওটির সংমিশ্রণের একটি অ্যারে।

তাদের কয়েকটি উদাহরণ রয়েছে , সহ:

এই পাথ দিয়ে শুরু ম্যাচ হবে /abcd, /xyza, /lmn, এবং /pqr:

app.use(['/abcd', '/xyza', /\/lmn|\/pqr/], function (req, res, next) {
  next();
});


-2

আপনার আসল রুটের ফাইল প্রয়োজন এবং নতুন রুটটিকে এভাবে সংজ্ঞায়িত করুন

var user = require('./users');
router.post('/login', user.post('/login'));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.