এক্সপ্রেসে রুটের পরে alচ্ছিক প্যারামিটার সহ রুট নিয়ন্ত্রণ পাস করছেন?


91

আমি একটি সাধারণ url- সংক্ষিপ্তকরণ অ্যাপে কাজ করছি এবং নিম্নলিখিত এক্সপ্রেস রুটগুলি রাখছি:

app.get('/', function(req, res){
  res.render('index', {
    link: null
  });
});

app.post('/', function(req, res){
  function makeRandom(){
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for( var i=0; i < 3 /*y u looking at me <33??*/; i++ )
      text += possible.charAt(Math.floor(Math.random() * possible.length));
    return text;
  }
  var url = req.body.user.url;
  var key = makeRandom();
  client.set(key, url);
  var link = 'http://50.22.248.74/l/' + key;
  res.render('index', {
    link: link
  });
  console.log(url);
  console.log(key);
});

app.get('/l/:key', function(req, res){
  client.get(req.params.key, function(err, reply){
    if(client.get(reply)){
      res.redirect(reply);
    }
    else{
      res.render('index', {
        link: null
      });
    }
  });
});

আমি এটি মুছে ফেলতে চাই /l/ আমার রুটটি থেকে (আমার ইউআরএলটির সংক্ষিপ্ত করতে) এবং: কী প্যারামিটারটি .চ্ছিক করে তুলুন। এটি করার এটি কি সঠিক উপায়:

app.get('/:key?', function(req, res, next){
  client.get(req.params.key, function(err, reply){
    if(client.get(reply)){
      res.redirect(reply);
    }
    else{
      next();
    }
  });
});

app.get('/', function(req, res){
  res.render('index, {
    link: null
  });
});

আমার /রুটটি যেটিকে "নেেক্সটেড" করতে হবে তা নির্দিষ্ট করতে হবে কিনা তা নিশ্চিত না । তবে যেহেতু আমার একমাত্র অন্য রুটটি আমার আপডেট হওয়া পোস্ট /রুট হবে তাই আমি কল্পনা করব এটি ঠিকঠাক হবে।

উত্তর:


198

এটি ক্লায়েন্ট.জেট তার প্রথম পরামিতি হিসাবে অপরিজ্ঞাত পাস করার পরে কি করে তার উপর নির্ভর করে কাজ করবে।

এরকম কিছু নিরাপদ হবে:

app.get('/:key?', function(req, res, next) {
    var key = req.params.key;
    if (!key) {
        next();
        return;
    }
    client.get(key, function(err, reply) {
        if(client.get(reply)) {
            res.redirect(reply);
        }
        else {
            res.render('index', {
                link: null
            });
        }
    });
});

কলব্যাকের অভ্যন্তরে পরবর্তী () কল করতে কোনও সমস্যা নেই।

মতে এই , হ্যান্ডলার, যাতে তারা যোগ করা হয় আবাহন হয়, তাই যতদিন আপনার পরবর্তী রুট app.get ( '/', ...) এটা যদি কোন চাবিকাঠি নামক করা হবে।


ধন্যবাদ মানুষ. আপনি বিকল্প প্রশংসা করা হয়। দুঃখের সাথে আমার আর একটি সমস্যা আছে, তবে আমি মনে করি আপনি যেমন নির্দেশ করেছেন এটি কী ফিরে এসেছে তার ফল client.get। আমি একটি cannot call method 'indexOf' of nullত্রুটি নিক্ষেপ করছি ।
কিউকম

এছাড়াও, সেটিতে কল আনা সম্ভব হবে next()মধ্যে else{}?
কিউকম

কমেন্টেস্টের জন্য দুঃখিত। ঠিক হয়ে গেছে, তবে এটি সুপার জ্যাঙ্ক এক্সডি
কিউকম

3

এক্সপ্রেস সংস্করণ:

"dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1"
  }

Ptionচ্ছিক প্যারামিটার খুব সহজ, আপনি এক্সপ্রেস ব্যবহার করে এগুলি সহজেই ঘোষণা এবং ব্যবহার করতে পারেন:

app.get('/api/v1/tours/:cId/:pId/:batchNo?', (req, res)=>{
    console.log("category Id: "+req.params.cId);
    console.log("product ID: "+req.params.pId);
    if (req.params.batchNo){
        console.log("Batch No: "+req.params.batchNo);
    }
});

উপরের কোড ব্যাচনে নেই । এক্সপ্রেস এটিকে alচ্ছিক গণনা করবে কারণ ইউআরএল নির্মাণের পরে, আমি একটি 'দিয়েছি?' ব্যাচনো'র পরে প্রতীক '/: ব্যাচনো?'

এখন আমি কেবল বিভাগ আইডি এবং প্রোডাক্টআইডি বা সমস্ত তিন-পরামিতি সহ কল ​​করতে পারি।

http://127.0.0.1:3000/api/v1/tours/5/10
//or
http://127.0.0.1:3000/api/v1/tours/5/10/8987

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.