mysql과 node.js를 연결하다가 이러한 데이터 형식이 나왔다. 처음에 데이터를 추출하고자 했는데 잘 안되서, 몇번 헤매다가 데이터 추출 형식에 대해서 글로 작성해야 겠다고 생각하여 글을 적는다. 이에 대한 방법이 어려운게 아니라 배열형식으로 추출되서 다음에 할 때 또 까먹을 것 같아서 작성한다.
RowDataPacket
이는 위에도 작성했듯이 mysql과 node.js를 연결하면 이러한 데이터 형식으로 도출이 된다. MySQL 데이터베이스에서 RowDataPacket로 반환해주는 듯하다. connect pool을 이용해 db와 연결하고 query문을 작성한다. query문에 맞는 데이터가 나온다.
https://stackoverflow.com/questions/31221980/how-to-access-a-rowdatapacket-object
에 보면 RowDataPacket는 객체를 생성하는 생성자 함수의 이름이라고 서술되어 있다.
나의 경우에는 query을 사용해서 limit문법을 사용하여 데이터를 하나만 가져왔다. 배열을 사용해서 원하는 데이터값만 추출할 생각을 못했다. 왜냐하면 방금 전에도 말했던 것처럼 데이터값이 하나였기 때문이다. 그래서 처음에 충격먹었다. 모든 값을 가져올 때 배열을 이용해서 가져와야 한다.
데이터가 긴 경우
내가 반환한 데이터값은 좀 짧았다. 그런데 사이트를 보았을 때 다른 사람의 경우는 데이터값이 길었다. RowDataPacket는 아래와 같은 형식으로 나온다.
RowDataPacket {user_id: 104, ActionsPerformed: 3}
데이터가 긴 경우는 먼저 반환 값(RowDataPacket 개체)을 문자열로 변환한 다음 이 문자열을 json로 변환한다.
자바스크립트에서 제공하는 json관련 메서드
- json.stringify : 객체를 string으로 바꿔준다.
- json.parse : string을 객체로 바꿔준다.
여기서 왜 문자열로 변환하고 그다음에 json으로 변환하냐면 특유의 객체에서 json으로 변환이 불가능하다. 그러기에 한 단계를 거쳐서 json으로 바꿔줘야 한다. 데이터값이 한줄로 해서 나오면 보기가 어렵기에 이렇게 변환을 한다.
req.models.tb_user.query(sql,function(err, results) {
console.log('>> results: ', results );
var string=JSON.stringify(results);
console.log('>> string: ', string );
var json = JSON.parse(string);
console.log('>> json: ', json);
console.log('>> user.name: ', json[0].name);
req.list = json;
next();
});
results=JSON.parse(JSON.stringify(results))
이 경우가 맞는 경우도 있다고 한다. 위와 같은 경우가 맞는 경우는 “RowDataPacket {user_id: 104, ActionsPerformed: 3}”로 나오기 때문인 것 같다. 이렇게 정리하고 나중에 한번 시도해보면 좋을 듯하다.
데이터 출력
아래와 같은 출력은 RowDataPacket을 그대로 출력했을 때이다.
이렇게 배열로 잡고 data를 출력했을 때는 아래와 같이 출력된다.
rows[0].data
위와 같이 출력되었을 때 내가 원하는 값만 출력하고자 한다면 나의 경우에는 split함수를 써서 출력했다.