Programing

"?"후에 GET 매개 변수에 액세스하는 방법

lottogame 2020. 2. 14. 23:22
반응형

"?"후에 GET 매개 변수에 액세스하는 방법 Express에서?


다음과 같은 쿼리에 대한 매개 변수를 얻는 방법을 알고 있습니다.

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

이 경우 req.params.id매개 변수를 얻는 데 사용할 수 있습니다 (예 : 2in /sample/2).

그러나 url과 같은 /sample/2?color=red경우 변수에 color어떻게 액세스 할 수 있습니까?

시도 req.params.color했지만 작동하지 않았습니다.


따라서 express reference 을 확인한 후 req.query.color원하는 값을 반환 한다는 것을 알았 습니다.

req.params는 URL에 ':'가있는 항목을 나타내고 req.query는 '?'와 연관된 항목을 나타냅니다.

예:

GET /something?color1=red&color2=blue

그런 다음 처리기로 표현하십시오.

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

경로에서 쿼리 문자열 매개 변수의 값을 얻으려면 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() 이제 더 이상 사용되지 않으므로 앞으로이 답변을 사용하지 마십시오.


귀하의 답변이 선호되는 방법이지만,로 URL, 게시물 및 경로 매개 변수에 모두 액세스 할 수 있다고 지적했습니다 req.param(parameterName, defaultValue).

귀하의 경우 :

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

빠른 가이드에서 :

조회는 다음 순서로 수행됩니다.

  • 필수 매개 변수
  • 요청 바디
  • 요청

이 안내서에는 다음 내용이 나와 있습니다.

각 객체의 입력을 실제로 받아들이지 않는 한 req.body, req.params 및 req.query에 직접 액세스하는 것이 명확해야합니다.

그러나 실제로는 실제로 req.param()충분히 명확하고 특정 유형의 리팩토링을 더 쉽게 만듭니다.


@Zugwait의 답변이 맞습니다. req.param()더 이상 사용되지 않습니다. 당신이 사용한다 req.params, req.query또는 req.body.

그러나 더 명확하게하기 위해 :

req.params경로 값만 채워집니다. 즉,와 같은 경로가있는 경우 in 또는에 /users/:id액세스 할 수 있습니다 .idreq.params.idreq.params['id']

req.queryreq.body로 채워집니다 모든 관계없이 경로에 여부에 PARAMS. 물론 쿼리 문자열의 매개 변수는에서 사용할 수 있으며 req.query게시물 본문의 매개 변수는에서 사용할 수 있습니다 req.body.

따라서 color경로에없는 것처럼 질문에 대답 하면 req.query.color또는 을 사용하여 얻을 수 있습니다 req.query['color'].


쿼리 문자열과 매개 변수가 다릅니다.

단일 라우팅 URL에서 둘 다 사용해야합니다

아래 예제를 참조하여 유용 할 수 있습니다.

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

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

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

});

두 번째 세그먼트를 전달하는 링크는 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


Express 매뉴얼은 req.query 를 사용하여 QueryString에 액세스 해야한다고 말합니다 .

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

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

});

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

Express에서 내 앱 중 일부와 함께 사용하기 시작한 좋은 기술은 express의 요청 객체의 쿼리, 매개 변수 및 본문 필드를 병합하는 객체를 만드는 것입니다.

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

참고 URL : https://stackoverflow.com/questions/17007997/how-to-access-the-get-parameters-after-in-express



반응형