node.js - Express এ "?" এর পরে GET পরামিতি কিভাবে অ্যাক্সেস করবেন?




query-string (6)

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

কিন্তু শুধু এটা পরিষ্কার করতে:

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

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

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

আমি এই ধরনের প্রশ্নের জন্য প্যারামিটার পেতে কিভাবে জানি:

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

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

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

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


এক্সপ্রেশনে আমার কিছু অ্যাপ্লিকেশানগুলির সাথে আমি ব্যবহার করা শুরু করেছি এমন একটি চমৎকার কৌশল হল এমন একটি বস্তু তৈরি করা যা এক্সপ্রেশন এর অনুরোধ বস্তুর অনুসন্ধান, প্যারাম, এবং শরীরের ক্ষেত্রগুলিকে একত্রিত করে।

//./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);
});

এটি ব্যবহারকারীর অনুরোধের সাথে পাঠানো "কাস্টম ডেটা" তে কেবল "ডেলভ" করতে এটি চমৎকার এবং সহজ করে তোলে।

বিঃদ্রঃ

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

/*
 * @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";
    }
} 

প্রশ্ন স্ট্রিং এবং পরামিতি ভিন্ন।

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

উদাহরণস্বরূপ আপনার জন্য দরকারী হতে পারে দয়া করে চেক করুন।

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

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

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

});

আপনার দ্বিতীয় সেগমেন্টটি পাস করার লিঙ্কটি আপনার আইডি উদাহরণ: http://localhost:port/sample/123

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

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

     var id = req.query.id; 

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

    });

এই উদাহরণটি আপনার সাথে লিঙ্ক করুন: http://localhost:port/sample?id=123

উভয় একটি উদাহরণ

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

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

});

লিঙ্ক উদাহরণ পান: http://localhost:port/sample/123?id=123


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

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

});

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

আপনার উত্তর এটি করার পক্ষে পছন্দের উপায়, তবে আমি মনে করি আমি আপনাকে point out করছি যে আপনি req.param(parameterName, defaultValue) সহ url, পোস্ট এবং রুট পরামিতিগুলি অ্যাক্সেস করতে পারেন।

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

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

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

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

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

উল্লেখ্য গাইড নিম্নলিখিত বিবৃত করে:

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

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


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!')
)






query-string