본문 바로가기

dev/nodejs

node js - 요청, 응답

요청 객체에서 헤더 또는 토큰, 파라미터, 바디값 등등을 추출해서 사용해야 할 때가 있다.

또는 응답을 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