✅ req.params 와 req.body 의 차이
req.params
// @route GET api/posts/:id
// @desc 'get' 메소드를 써서 파라미터 프로퍼티인 id값에 맞는 포스트를 가져오는 요청
router.get("/:id", auth, async (req, res) => { // 'id'라는 프로퍼티
try {
const post = await Post.findById(req.params.id);
res.json(post);
} catch (err) {
res.status(500).send("Server Error");
}
});
'api/posts/:id'라는 라우터 경로가 있을 때, 'id'는 'req.params.id'로 불러올 수 있다.
req 객체에 'parameter'라는 프로퍼티가 있고, 그 프로퍼티의 'id'라는 프로퍼티로 접근해 요청을 보낼 수 있다.
req.query
req.query는 해당 라우트 경로에서 각각의 'query string'을 파라미터로 갖는 객체 프로퍼티이다. 만약 'query parser'가 값이 없으면 빈 객체가 나올 것이고, 그렇지 않으면 해당에 맞는 'query parser'가 나온다.
// GET /search?q=tobi+ferret
console.dir(req.query.q)
// '/search'라는 라우트 경로에서 query.q에 해당하는 값은 'tobi ferret'
// => 'tobi ferret'
// GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
console.dir(req.query.order)
// '/shoes'라는 라우트 경로에서 query.order에 해당하는 값은 'desc'
// => 'desc'
console.dir(req.query.shoe.color)
// '/shoes'라는 라우트 경로에서 query.shoe.color에 해당하는 값은 'blue'
// => 'blue'
console.dir(req.query.shoe.type)
// '/shoes'라는 라우트 경로에서 query.shoe.type에 해당하는 값은 'converse'
// => 'converse'
req.query의 형태는 사용자의 임의에 따라 결정되므로 그 해당 객체의 프로퍼티와 값을 신뢰하기 전에 타당한 것인지 입증되어야 한다. 예를 들어 'req.query.foo.toString()'은 여러 이유에서 입증이 실패될 수 있다. 'foo'가 없을 수도 있고 string이 아닐 수도 있으며, toString'은 function이 아닌 string일 수 있는 것이다.
req.body
'request body'에 'key-value'의 데이터가 담긴 객체 프로퍼티이다. JSON 객체에 접근 가능하다.
// POST https://swamp.com/login
//
// {
// "email": "sam@gmail.com",
// "password": "chompz4lyfe"
// }
app.post('/login', (req, res) => { // '/login'인 라우터 경로에 post 메소드를 써서 요청, 응답
console.log(req.body.email) // "sam@gmail.com"
console.log(req.body.password) // "chompz4lyfe"
})
👏 출처
https://velog.io/@aaronddy/Express-req.params-vs.-req.body
'Node.js' 카테고리의 다른 글
13. CRUD (0) | 2022.03.07 |
---|---|
12. MongoDB (0) | 2022.03.07 |
10. 구조 분해 할당 ( Destructiong assignment) (0) | 2022.02.27 |
9. 용어 정리 (0) | 2022.02.27 |
8. REST API (0) | 2022.02.19 |