programing

Node.js: req.query[]와 req.param의 차이

telecom 2023. 9. 27. 16:54
반응형

Node.js: req.query[]와 req.param의 차이

다음을 통해 QUREY_STRING 인수를 얻는 것과 차이가 있습니까?req.query[myParam]그리고.req.params.myParam? 그렇다면 언제 어느 것을 사용해야 합니까?

이 경로가 주어진 경우

app.get('/hi/:param1', function(req,res){} );
// regex version
app.get(/^\/hi\/(.*)$/, function(req,res){} );
// unnamed wild card
app.get('/hi/*', function(req,res){} );

그리고 이 URL이 주어졌습니다.http://www.google.com/hi/there?qs1=you&qs2=tube

다음을 가질 수 있습니다.

요망이 있는

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

요망하는 사람들

{
  param1: 'there'
}

경로 정의에 정규식을 사용할 경우 캡처 그룹은 다음을 사용하여 배열에 제공됩니다.req.params[n], 여기서 n은 n번째 캡처 그룹입니다.이 규칙은 문자열 경로가 있는 이름 없는 와일드 카드 일치에 적용됩니다.

Express req.params >>

req.params 경로 매개 변수(URL의 경로 부분에 있음)를 포함하고 URL 쿼리 매개 변수(다음에 있음)를 포함합니다.?URL)에 입력합니다.

두 위치 모두에서 매개변수를 검색하는 데 사용할 수도 있습니다.req.body), 그러나 이 메서드는 현재 더 이상 사용되지 않습니다.

요청.params

경로 이름을 다음과 같이 정의했다고 가정합니다.

https://localhost:3000/user/:userId

다음이 될 것입니다.

https://localhost:3000/user/5896544

인쇄할 경우 여기: request.params

{
userId : 5896544
}

그렇게

request.params.userId = 5896544

따라서 request.params는 명명된 경로의 속성을 포함하는 개체입니다.


부탁을 드립니다

요청이.쿼리는 URL의 쿼리 매개 변수에서 가져옵니다.

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

부탁을 드립니다

{

userId: 5896544

}

그렇게

request.query.userId = 5896544

이제 점 표기법을 사용하여 쿼리에 액세스할 수 있습니다.

액세스하려면 GET 요청을 수신하고 있다고 말합니다./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)});
});

나는 한가지 중요한 것을 언급하고 싶습니다.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

왜요? 삭제하면.+이 경우 오류가 발생하고 잘못된 유형을 사용하기 때문에 오류가 발생합니다(오류 메시지 'limit' 필드는 숫자여야 함).

중요: 이러한 쿼리 매개 변수에서 무언가를 추출하는 경우 기본적으로 해당 매개 변수는 항상 문자열이 됩니다. URL이 제공되고 텍스트로 처리되기 때문입니다.

숫자로 작업하고 질의문을 텍스트에서 숫자로 변환해야 한다면 문장 앞에 더하기 기호를 붙이면 됩니다.

만약 당신이 여기서 온다면 그 말을 덧붙이고 싶습니다.axios이 만들고, (GET/POST)query/url params로 읽을 수 있는)req.query 를 할 수 있습니다.

axios.post('/users', {...data}, {
  headers: {...anyHeaders},
  params: {uid: `${uid}`}
})

당신은 을 .path/route variables로 읽을 수 있는)req.params 을 할 수 있습니다.

axios.get(`/users/${uid`}, {
  headers: {...anyHeaders}
})

서버에서 쿼리 파라미터를 읽을 때 사용하는 이름은 클라이언트의 이름과 일치해야 합니다.할 수 있는 우법),다와 기능을 할 수 .react-router행:/path/:variable).

언급URL : https://stackoverflow.com/questions/14417592/node-js-difference-between-req-query-and-req-params

반응형