요청 객체에서 헤더 또는 토큰, 파라미터, 바디값 등등을 추출해서 사용해야 할 때가 있다.
또는 응답을 json으로 주거나 statusCode 등 필요한 데이터를 넘겨줘야 할 때가 있을 것이다.
요청
파라미터 : req.params[''] 또는 req.params.값 을 사용하면 된다. -> .param() 사용시 deprecated 경고가 뜬다.
쿼리스트링 : req.query['']를 사용하면 된다.
응답
json으로 전달 : send()를 이용해도 json으로 줄 수 있지만, json()이라는 명확한 함수가 있으므로 이것을 사용하는 것이 좋다.
const express = require('express');
const router = express.Router();
const dbconfig = require('../dbconfig.js');
router.get('/:id', (req, res) => {
console.log("param:" + req.params['id']); // 파라미터 추출
console.log("query: " + req.query['query']); // 쿼리스트링 값 추출
const conn = dbconfig.init();
dbconfig.connect(conn);
// 파라미터로 받은 id값만 조회
conn.query("SELECT * FROM test WHERE id. =?", [req.params['id']], (err, result, fields) => {
if (err) {
console.log(err);
return res.send(err);
} else {
console.log(result);
res.json(result); // json으로 응답
return res.send("Test good");
}
});
conn.end();
})
module.exports = router;
오류
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
이 오류가 자꾸 나서 찾아보니 클라이언트의 요청에서 2개 이상의 응답을 보내려고 할 때 생긴다고 한다.
if (err) {
console.log(err);
return res.send(err);
} else {
console.log(result);
res.json(result);
return res.send("Test good");
}
이 부분에서 나는 오류였다.
res.json도 응답으로 json을 반환하는 것인데 아래에 res.send로 또 반환하고 있다. 둘 중 하나를 지우면 해결이 된다.
'dev > nodejs' 카테고리의 다른 글
nodejs - env파일 (0) | 2023.07.22 |
---|---|
node js - typescript 설정 (0) | 2023.07.20 |
node js - route (0) | 2023.07.10 |
node js - mariaDB 연동 (0) | 2023.07.10 |
express 설치 (0) | 2023.03.22 |