본문 바로가기

main/Node.js

[MySQL | Javascript] query return값 받아서 저장하고 사용하는 방법

const getArchive = (req, callback) => {

  connection.query(selectQuery, function (selectErr, userRows) {
  
    if (userRows.length > 0) {
      return callback(JSON.parse(JSON.stringify(userRows[0])));
    } else {
      return callback(false);
    }
    
  })
}

connection.query를 통해 userRows에 어떤 결과를 받아 온다.

하지만 그 결과값을 return했을 때 console.log()를 찍어 보면, 데이터가 return되지 않고 undefined를 출력한다.

 

근데 위 코드처럼 callback을 리턴하면 이 값을 받아낼 수 있다.

 

 

JSON.함수를 쓴 이유

sql에서 query에서 나오는 값은 JSON값인데, 이 JSON은 키를 통해 값을 부를 수가 없다...

때문에 JSON.stringify()를 통해 먼저 String 객체로 변환시켜준 후, JSON.parse()를 통해 다시 JSON을 만든다?

. . . ?

아니 이 코드 짤 때는 분명 값 출력이 안 돼서 이렇게 해놓고 넘겼는데,

이제보니 이거 뭔가 이상하네. JSON.parse(JSON.stringify())는 결국 다시 JSON으로 돌리는 과정인데.

 

지우고 userRows[0]만 callback으로 보내도 코드가 잘 돈다. !!!???

그래서 JSON 함수를 다 지워버렸다. 이렇게 또 하나 배워 갑니다..

 

 

어쨌든, 그래서 

exports.functionName = (req, res) => {
  getArchive(req.body, function(results) {
    if (results) {
      res.send(200);
    }
  });
}

이런식으로, 실제 사용할 곳에서 getArchive 함수에 2번째 인자로 function을 써주면,

callback의 return이 results에 담겨서 오게 되고 나는 이 값을 사용할 수 있게 된다!