Node
http 통신 request의 query, params, body (with express)
citron031
2023. 3. 25. 10:22
express를 사용하여 서버를 만들면 URI를 통해서 API를 사용할 수 있다.
API 문서를 통해서 서버의 자원을 사용할 수 있다.
그렇다면, 클라이언트가 원하는 데이터를 얻기 위해서 URL에 데이터를 추가적으로 더 주었을 때(URI), express에서 어떻게 이 데이터를 받아와 response할 수 있을까?
query
const express = require('express');
const router = express.Router();
router.get('/hi', findAll);
- /hi?name=Kim&age=33 과 같은 URI에 접근하면, 서버에서 req.query 를 통해 데이터를 받을 수 있다.
- query를 시작할 때 ?를 쓰고, 여러 데이터를 받을 때는 &로 데이터를 구분한다.
- req.query는 객체로, req.query.name과 req.query.age에 접근하면, 각각 Kim과 33의 데이터를 얻을 수 있다.
- 변수명이 경로에 들어가기에 원하는 데이터를 서순에 관계없이 입력할 수 있다.
- 필수 파라미터와 입력하지 않아도 되는 파라미터를 모두 사용할 수 있다.
params
const express = require('express');
const router = express.Router();
router.get('/:id', findById);
router.put('/:id', update);
// 생략
- params의 데이터는 라우터에서 경로로 :id로 미리 지정되어 있다.
- /idIs1234 와 같은 경로에 접근하면, 서버에는 req.params.id에 idIs1234가 들어있음을 알 수 있다.
- put역시 params로 데이터를 전달할 수 있다.
- params로 미리 라우터에 :id와 같이 이름을 설정해 놓으면, URL로 데이터를 전달하여 서버에서 정보를 받을 수 있다.
- query와 다르게 ?id=를 쓰지 않아서 경로가 깔끔해질 수 있다.
- 경로에 변수명이 명시되지 않기에, 여러 개의 파라미터를 전달한다면 서순을 잘 맞춰야 한다.
body
const express = require('express');
const router = express.Router();
express.use(express.json());
router.post('/', create);
router.put('/:id', update);
router.post('/sample', (req, res, next) => {
console.log(req.body);
res.status(200).json({"msg": "ok"});
});
- GET 메소드에서는 body를 사용하지 않지만, PUT이나 POST등을 사용할 때, 데이터는 body에 담겨져 온다.
- req.body에 객체로 데이터가 담겨져 있다.
- express.use(express.json()); 를 설정해야 req의 body값이 파싱된다.