"" এর পরে জিইটি প্যারামিটারগুলি কীভাবে অ্যাক্সেস করবেন? এক্সপ্রেসে?


526

আমি জানি যে এই জাতীয় প্রশ্নের জন্য কীভাবে প্যারামগুলি পাওয়া যায়:

app.get('/sample/:id', routes.sample);

এই ক্ষেত্রে, আমি req.params.idপ্যারামিটারটি পেতে ব্যবহার করতে পারি (উদাহরণস্বরূপ 2ইন/sample/2 )।

তবে, ইউআরএলের মতো /sample/2?color=red, আমি কীভাবে চলকটি অ্যাক্সেস করতে পারিcolor ?

আমি চেষ্টা করেছি req.params.colorকিন্তু কাজ হয়নি।

উত্তর:


775

সুতরাং, এক্সপ্রেস রেফারেন্স চেক করার পরে , আমি এটি খুঁজে পেয়েছিreq.query.color মানটি খুঁজছি তা আমাকে ফিরিয়ে দেবে।

req.params ইউআরএলে একটি ':' সহ আইটেমগুলিকে বোঝায় এবং req.query 'এর সাথে যুক্ত আইটেমগুলিকে বোঝায়?'

উদাহরণ:

GET /something?color1=red&color2=blue

তারপরে এক্সপ্রেসে হ্যান্ডলার:

app.get('/something', (req, res) => {
    req.query.color1 === 'red'  // true
    req.query.color2 === 'blue' // true
})

আপনি কীভাবে আমাকে "আইডি" যাচাই করবেন তা বলতে পারেন?
আনন্দ রাজ

1
@ আনন্দরাজ: আপনার অর্থ কী: "আইডি" কীভাবে বৈধ করবেন? আপনি কোন ধরনের বৈধতা চান? BTW, আপনি এর মান পেতে পারেন idএই মত আপনার ফাংশনে: var sampleId = req.params.id;
জোহেম শুলেনক্লাপ্পার

4
req.params.whateverসর্বশেষ সংস্করণে ব্যবহার করুন ।
adelriosantiago


81

রুটে ক্যোয়ারিং স্ট্রিং প্যারামিটারে তার মূল্য পাওয়ার জন্য, req.query ব্যবহার করুন। পড়ুন req.query । কোনও রুটে যদি বলুন, http: // লোকালহোস্ট: 3000 /? নাম = সত্যাম আপনি নামের প্যারামিটারের মান পেতে চান তবে আপনার 'গেট' রুট হ্যান্ডলারটি এভাবে চলে যাবে: -

app.get('/', function(req, res){
    console.log(req.query.name);
    res.send('Response send to client::'+req.query.name);

});

একটি সম্পূর্ণ উত্তর পেতে
ক্যোসার্টিং

67

আপডেট: req.param() এখন হ্রাস করা হয়েছে, সুতরাং এগিয়ে যাওয়া এই উত্তরটি ব্যবহার করবেন না।


আপনার উত্তরটি এটি করার পক্ষে পছন্দসই উপায়, তবে আমি ভেবেছিলাম যে আমি এটি উল্লেখ করব যে আপনি ইউআরএল, পোস্ট এবং রুট পরামিতিগুলিও অ্যাক্সেস করতে পারবেন req.param(parameterName, defaultValue)

আপনার ক্ষেত্রে:

var color = req.param('color');

এক্সপ্রেস গাইড থেকে:

অনুসন্ধান নিম্নলিখিত ক্রমে সঞ্চালিত হয়:

  • req.params
  • req.body
  • req.query

গাইডটি নিম্নলিখিতটি উল্লেখ করেছে তা নোট করুন:

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

তবে অনুশীলনে আমি আসলে req.param()যথেষ্ট পরিষ্কার হয়েছি এবং নির্দিষ্ট ধরণের রিফ্যাক্টরিংকে সহজ করে তুলেছি।


53

ক্যোরি স্ট্রিং এবং প্যারামিটারগুলি আলাদা।

আপনাকে একক রাউটিং ইউআরএল উভয়ই ব্যবহার করতে হবে

নীচের চেক করুন দয়া করে আপনার জন্য দরকারী হতে পারে।

app.get('/sample/:id', function(req, res) {

 var id = req.params.id; //or use req.param('id')

  ................

});

আপনার দ্বিতীয় বিভাগটি পাস করার জন্য লিঙ্কটি পান এটি আপনার আইডি উদাহরণ: http: // লোকালহোস্ট: পোর্ট / নমুনা / 123

আপনি যদি সমস্যার মুখোমুখি হন তবে '?' ব্যবহার করে কোয়েরি স্ট্রিং হিসাবে পাসিং ভেরিয়েবলগুলি ব্যবহার করবেন? অপারেটর

  app.get('/sample', function(req, res) {

     var id = req.query.id; 

      ................

    });

আপনার উদাহরণটির মতো লিঙ্কটি পান: http: // লোকালহোস্ট: পোর্ট / নমুনা? আইডি = 123

উভয়ই একক উদাহরণে

app.get('/sample/:id', function(req, res) {

 var id = req.params.id; //or use req.param('id')
 var id2 = req.query.id; 
  ................

});

লিঙ্কের উদাহরণটি পান: http: // লোকালহোস্ট: পোর্ট / নমুনা / 123? আইডি = 123


2
ধন্যবাদ এই উত্তরটি খুব সহায়ক ছিল!
ব্রুনো টাভারেস

44

@ জুগওয়াইটের উত্তরটি সঠিক। req.param()অবচয় করা হয়। আপনার ব্যবহার করা উচিত req.params, req.queryবা req.body

তবে কেবল এটি পরিষ্কার করার জন্য:

req.paramsশুধুমাত্র রুটের মান দিয়ে জনবহুল হবে। অর্থাৎ তোমার মত একটি রুট আছে যদি /users/:id, আপনি অ্যাক্সেস করতে পারেন idপারেন মধ্যে req.params.idবা req.params['id']

req.queryএবং তারা রুটে থাকুক বা না থাকুক, সমস্ত প্যারামের req.bodyসাথে জনবহুল হবে । অবশ্যই, ক্যোয়ারী স্ট্রিংয়ের প্যারামিটারগুলি উপলব্ধ থাকবে এবং পোস্ট বডিতে প্যারামিটারগুলি উপলব্ধ থাকবে ।req.queryreq.body

সুতরাং, আপনার প্রশ্নের উত্তর দেওয়া, যেমনটি colorরুটে নেই, আপনি এটি ব্যবহার করে req.query.colorবা এটি পেতে সক্ষম হবেন req.query['color']


17

এক্সপ্রেস ম্যানুয়ালটিতে বলা হয়েছে যে আপনার ক্যোরিস্ট্রিং অ্যাক্সেস করতে req.query ব্যবহার করা উচিত ।

// Requesting /display/post?size=small
app.get('/display/post', function(req, res, next) {

  var isSmall = req.query.size === 'small'; // > true
  // ...

});

7
const express = require('express')
const bodyParser = require('body-parser')
const { usersNdJobs, userByJob, addUser , addUserToCompany } = require ('./db/db.js')

const app = express()
app.set('view engine', 'pug')
app.use(express.static('public'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.get('/', (req, res) => {
  usersNdJobs()
    .then((users) => {
      res.render('users', { users })
    })
    .catch(console.error)
})

app.get('/api/company/users', (req, res) => {
  const companyname = req.query.companyName
  console.log(companyname)
  userByJob(companyname)
    .then((users) => {
      res.render('job', { users })
    }).catch(console.error)
})

app.post('/api/users/add', (req, res) => {
  const userName = req.body.userName
  const jobName = req.body.jobName
  console.log("user name = "+userName+", job name : "+jobName)
  addUser(userName, jobName)
    .then((result) => {
      res.status(200).json(result)
    })
    .catch((error) => {
      res.status(404).json({ 'message': error.toString() })
    })
})
app.post('/users/add', (request, response) => {
  const { userName, job } = request.body
  addTeam(userName, job)
  .then((user) => {
    response.status(200).json({
      "userName": user.name,
      "city": user.job
    })
  .catch((err) => {
    request.status(400).json({"message": err})
  })
})

app.post('/api/user/company/add', (req, res) => {
  const userName = req.body.userName
  const companyName = req.body.companyName
  console.log(userName, companyName)
  addUserToCompany(userName, companyName)
  .then((result) => {
    res.json(result)
  })
  .catch(console.error)
})

app.get('/api/company/user', (req, res) => {
 const companyname = req.query.companyName
 console.log(companyname)
 userByJob(companyname)
 .then((users) => {
   res.render('jobs', { users })
 })
})

app.listen(3000, () =>
  console.log('Example app listening on port 3000!')
)

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

2

এক্সপ্রেসে আমার কয়েকটি অ্যাপ্লিকেশন দিয়ে আমি যে দুর্দান্ত কৌশলটি ব্যবহার শুরু করেছি তা হ'ল এমন একটি বস্তু তৈরি করা যা ক্যোয়ারী, প্যারাম এবং এক্সপ্রেসের অনুরোধের বস্তুর বডি ফিল্ডগুলিকে একত্রিত করে।

//./express-data.js
const _ = require("lodash");

class ExpressData {

    /*
    * @param {Object} req - express request object
    */
    constructor (req) {

        //Merge all data passed by the client in the request
        this.props = _.merge(req.body, req.params, req.query);
     }

}

module.exports = ExpressData;

তারপরে আপনার নিয়ামক সংস্থায় বা এক্সপ্রেস অনুরোধ শৃঙ্খলার সুযোগে অন্য কোথাও আপনি নীচের মতো কিছু ব্যবহার করতে পারেন:

//./some-controller.js

const ExpressData = require("./express-data.js");
const router = require("express").Router();


router.get("/:some_id", (req, res) => {

    let props = new ExpressData(req).props;

    //Given the request "/592363122?foo=bar&hello=world"
    //the below would log out 
    // {
    //   some_id: 592363122,
    //   foo: 'bar',
    //   hello: 'world'
    // }
    console.log(props);

    return res.json(props);
});

এটি ব্যবহারকারীর দ্বারা তাদের অনুরোধটি প্রেরণ করা "কাস্টম ডেটা" এর সমস্তটিতে কেবল "ডেলভেইড" করা সুন্দর এবং সহজ করে তুলেছে।

বিঃদ্রঃ

কেন 'প্রপস' ক্ষেত্র? যেহেতু এটি একটি কাটা ডাউন স্নিপেট ছিল, আমি এই কৌশলটি আমার বেশ কয়েকটি এপিআইতে ব্যবহার করি, আমি প্রমাণীকরণ / অনুমোদনের ডেটাও এই বস্তুর উপরে সঞ্চয় করি, উদাহরণস্বরূপ নীচে।

/*
 * @param {Object} req - Request response object
*/
class ExpressData {

    /*
    * @param {Object} req - express request object
    */
    constructor (req) {

        //Merge all data passed by the client in the request
        this.props = _.merge(req.body, req.params, req.query);

        //Store reference to the user
        this.user = req.user || null;

        //API connected devices (Mobile app..) will send x-client header with requests, web context is implied.
        //This is used to determine how the user is connecting to the API 
        this.client = (req.headers) ? (req.headers["x-client"] || (req.client || "web")) : "web";
    }
} 

1
এটি সম্ভবত একটি খারাপ ধারণা কারণ এটি আপনার শেষ পয়েন্টগুলি বজায় রাখা আরও শক্ত করে তোলে। প্যারামিটারগুলি পাস করার জন্য ক্লায়েন্টরা কোন পদ্ধতিটি ব্যবহার করবে তা আপনি আর জানেন না।
sdgfsdh

ক্ষেত্রগুলি কোথা থেকে এসেছে তা জেনেও সততা থাকার জন্য এই পদ্ধতির অন্যতম প্রধান সুবিধা। উপরের এক্সপ্রেসডাটা ক্লাসটি সেতুর মতো কাজ করে, আপনাকে আপনার ব্যবসায়ের যুক্তিটিকে এক্সপ্রেস নিয়ন্ত্রণকারী রুট থেকে দূরে সরিয়ে দেয়, অর্থাৎ আপনি আপনার কোডটিতে 'req.query', 'req.body' বেক করছেন না, এটিও তৈরি করে আপনার ব্যবসায়ের কোডটি সহজেই এক্সপ্রেসের বাইরে টেস্টযোগ্য।
লি ব্রিন্ডলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.