নোড.জেএস: রেকর্ড ক্যোয়ারী [] এবং রেকর্ডার মধ্যে পার্থক্য


124

সেখানে মাধ্যমে QUERY_STRING এর সাথে আর্গুমেন্ট প্রাপ্তির মধ্যে একটি পার্থক্য আছে req.query[myParam]এবং req.params.myParam? যদি তাই হয়, আমি কখন ব্যবহার করব?

উত্তর:


142

req.paramsরুটের প্যারামিটারগুলি (URL এর পাথ অংশে) req.queryরয়েছে এবং এতে URL টি কোয়েরি পরামিতি রয়েছে (URL এর পরে ?)।

আপনি req.param(name)উভয় স্থানে (পাশাপাশি req.body) একটি প্যারামিটার সন্ধান করতেও ব্যবহার করতে পারেন , তবে এই পদ্ধতিটি এখন অবচয় করা হয়েছে।


আহ, ঠিক আছে, ধন্যবাদ, তাই উভয় এক্সপ্রেস দ্বারা সরবরাহ করা হয়। এবং পোষ্টের ডেটাগুলি আমি req.body.myParam এর মাধ্যমে অ্যাক্সেস করি?

1
ঠিক। কোনটি ব্যবহার করবেন তা নির্ভর করে আপনি যা করার চেষ্টা করছেন তার উপর।
জনিএইচকে

এছাড়াও নোট করুন: "স্পষ্টতার জন্য req.body, req.params এবং req.query এ সরাসরি অ্যাক্সেস করা উচিত - যদি না আপনি প্রতিটি বস্তু থেকে সত্যই ইনপুট গ্রহণ না করেন।" - এক্সপ্রেস ডকুমেন্টেশন
রায়ান Q

2
req.paramএখন অবচয় করা হয়েছে। নোড ব্যবহার করার পরামর্শ দেয় req.queryবাreq.params
সাইয়ানগার্ল

3
কেন এটিকে অবমূল্যায়ন করবেন? আমরা যদি প্যারাম বা কোয়েরি ব্যবহার করি এবং তারপরে অন্যটিতে পরিবর্তন করার সিদ্ধান্ত নিই তবে কী হবে?
জন

247

এই রুট দেওয়া হয়েছে

app.get('/hi/:param1', function(req,res){} );

এবং এই ইউআরএল দেওয়া হয়েছে http://www.google.com/hi/there?qs1=you&qs2=tube

তোমার থাকবে:

req। প্রশ্ন

{
  qs1: 'you',
  qs2: 'tube'
}

req। প্যারাম

{
  param1: 'there'
}

এক্সপ্রেস req.params >>


আমার কি প্রয়োজন / হাই /?
ড্যানিয়েল

2
req.url বা req.originalUll বা req._originalUrl একবার দেখুন, তারপরে/
রাফ্রেয়ে

22

মনে করুন আপনি নিজের রুটের নামটি এভাবে সংজ্ঞায়িত করেছেন:

https://localhost:3000/user/:userid

যা হয়ে যাবে:

https://localhost:3000/user/5896544

আপনি যদি এখানে মুদ্রণ করবেন: অনুরোধ.প্রেমস

{
userId : 5896544
}

সুতরাং

request.params.userId = 5896544

তাই request.params নামে রুট বৈশিষ্ট্য সম্পর্কে একটি অবজেক্ট

এবং অনুরোধ.কিউরিয়ায় ইউআরএল যেমন ক্যোয়ারী প্যারামিটার থেকে আসে:

https://localhost:3000/user?userId=5896544 

request.query

{

userId: 5896544

}

সুতরাং

request.query.userId = 5896544

ভাল ব্যাখ্যা
Abk

7

আপনার এখন ডট স্বরলিপি ব্যবহার করে ক্যোয়ারী অ্যাক্সেস করতে সক্ষম হওয়া উচিত।

আপনি যদি অ্যাক্সেস করতে চান তবে বলুন যে আপনি এখানে একটি জিইটি অনুরোধ পেয়েছেন /checkEmail?type=email&utm_source=xxxx&email=xxxxx&utm_campaign=XXএবং আপনি ব্যবহৃত ক্যোয়ারী বের করতে চান ।

var type = req.query.type,
    email = req.query.email,
    utm = {
     source: req.query.utm_source,
     campaign: req.query.utm_campaign
    };

অনুরোধ গ্রহণের জন্য স্ব-সংজ্ঞায়িত প্যারামিটারের জন্য প্যারামগুলি ব্যবহার করা হয়, এরকম কিছু (উদাহরণস্বরূপ):

router.get('/:userID/food/edit/:foodID', function(req, res){
 //sample GET request at '/xavg234/food/edit/jb3552'

 var userToFind = req.params.userID;//gets xavg234
 var foodToSearch = req.params.foodID;//gets jb3552
 User.findOne({'userid':userToFind}) //dummy code
     .then(function(user){...})
     .catch(function(err){console.log(err)});
});

0

আমি সম্পর্কিত একটি গুরুত্বপূর্ণ নোট উল্লেখ করতে চাই req.query, কারণ বর্তমানে আমি পৃষ্ঠা ভিত্তিক কার্যকারিতা উপর ভিত্তি করে কাজ করছি req.queryএবং আপনার কাছে প্রদর্শন করার জন্য আমার একটি আকর্ষণীয় উদাহরণ রয়েছে ...

উদাহরণ:

// Fetching patients from the database
exports.getPatients = (req, res, next) => {

const pageSize = +req.query.pageSize;
const currentPage = +req.query.currentPage;

const patientQuery = Patient.find();
let fetchedPatients;

// If pageSize and currentPage are not undefined (if they are both set and contain valid values)
if(pageSize && currentPage) {
    /**
     * Construct two different queries 
     * - Fetch all patients 
     * - Adjusted one to only fetch a selected slice of patients for a given page
     */
    patientQuery
        /**
         * This means I will not retrieve all patients I find, but I will skip the first "n" patients
         * For example, if I am on page 2, then I want to skip all patients that were displayed on page 1,
         * 
         * Another example: if I am displaying 7 patients per page , I want to skip 7 items because I am on page 2,
         * so I want to skip (7 * (2 - 1)) => 7 items
         */
        .skip(pageSize * (currentPage - 1))

        /**
         * Narrow dont the amound documents I retreive for the current page
         * Limits the amount of returned documents
         * 
         * For example: If I got 7 items per page, then I want to limit the query to only
         * return 7 items. 
         */
        .limit(pageSize);
}
patientQuery.then(documents => {
    res.status(200).json({
        message: 'Patients fetched successfully',
        patients: documents
    });
  });
};

আপনি খেয়াল করবে +সামনে চিহ্ন req.query.pageSizeএবংreq.query.currentPage

কেন? আপনি যদি +এই ক্ষেত্রে মুছে ফেলেন তবে আপনি একটি ত্রুটি পাবেন এবং সেই ত্রুটি নিক্ষেপ করা হবে কারণ আমরা অবৈধ প্রকারটি ব্যবহার করব (ত্রুটির বার্তা সহ 'সীমাবদ্ধ ক্ষেত্রটি অবশ্যই সংখ্যাসূচক হওয়া উচিত)।

গুরুত্বপূর্ণ : ডিফল্টরূপে যদি আপনি এই ক্যোয়ারী প্যারামিটারগুলি থেকে কিছু বের করেন তবে এটি সর্বদা একটি স্ট্রিং হবে , কারণ এটি ইউআরএল আসবে এবং এটি একটি পাঠ্য হিসাবে বিবেচিত হবে।

যদি আমাদের সংখ্যার সাথে কাজ করার প্রয়োজন হয়, এবং ক্যোয়ারী স্টেটমেন্টগুলি পাঠ্য থেকে সংখ্যায় রূপান্তর করা হয়, তবে আমরা কেবলমাত্র স্টেটমেন্টের সামনে একটি প্লাস চিহ্ন যুক্ত করতে পারি।

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