본문 바로가기
Server Developer/Node.js

[Node.js] Dao에서 내가 원하는 결과 외에 다른 데이터가 나오는 경우

by 성 언 2023. 2. 4.

Node.js 학습 후 정리한 포스팅 입니다.

이번 포스팅에서는 Node.js에 대해 학습합니다.

 

I) 문제

Express를 통해 API 설계 중 Dao에서 내가 원하는 결과 외에 다른 데이터가 나왔다.

// 2 - 5 책 모임의 소속 회원의 이름, 상태메시지, 현재 상태를 조회함
module.exports.clubMember = async (connection, [club_id]) =>{
    const clubSearchQuery =`SELECT UserInfo.user_id, UserInfo.now_reading, UserInfo.profile_message FROM UserInfo LEFT JOIN ClubMember ON UserInfo.user_id = ClubMember.user_id LEFT JOIN ClubInfo ON ClubMember.club_id = ClubInfo.club_id WHERE ClubInfo.club_id = ?;`;
    const clubSearchRow = await connection.query(clubSearchQuery, [club_id]);
    
    return clubSearchRow;
}

PostMan API 문서로 확인을 해보면 아래와 같았다

내가 불러온 정보 외에 _buf 어쩌고 저쩌고 이런 정보가 계속 같이 받아졌다...

추가로 받아오는 데이터는 ColumnDefinition이었다. 

MySQL에서 query() 함수는 rows, fields를 반환한다.

아래와 같이 코드를 수정하여 해결할 수 있었다.

// 2 - 5 책 모임의 소속 회원의 이름, 상태메시지, 현재 상태를 조회함
module.exports.clubMember = async (connection, [club_id]) =>{
    const clubSearchQuery =`SELECT UserInfo.user_id, UserInfo.now_reading, UserInfo.profile_message FROM UserInfo LEFT JOIN ClubMember ON UserInfo.user_id = ClubMember.user_id LEFT JOIN ClubInfo ON ClubMember.club_id = ClubInfo.club_id WHERE ClubInfo.club_id = ?;`;
    const clubSearchRow = await connection.query(clubSearchQuery, [club_id]);
    
    return clubSearchRow[0];
}

더 직관적으로 표기하는 방법은 아래와 같다.

// 2 - 5 책 모임의 소속 회원의 이름, 상태메시지, 현재 상태를 조회함
module.exports.clubMember = async (connection, [club_id]) =>{
    const clubSearchQuery =`SELECT UserInfo.user_id, UserInfo.now_reading, UserInfo.profile_message FROM UserInfo LEFT JOIN ClubMember ON UserInfo.user_id = ClubMember.user_id LEFT JOIN ClubInfo ON ClubMember.club_id = ClubInfo.club_id WHERE ClubInfo.club_id = ?;`;
    const [rows, fields] = await connection.query(clubSearchQuery, [club_id]);
    
    return rows;
}

PostMan 확인 시 내가 원하는 정보만 가져오는 것을 확인할 수 있다.

 

 

 

 

II) REF

https://stackoverflow.com/questions/57029074/getting-schema-info-in-mysql-query

 

Getting schema info in mysql query

I have a table in mysql database, which has three records. The table has 11 columns. I am using mysql2 for query; my query is: let mylist=[]; mylist = await pool.query( "SELECT * FROM mytable

stackoverflow.com

https://stackoverflow.com/questions/69599546/why-do-mysql-query-show-columndefinition

 

why do mysql query show ColumnDefinition

I am using mysql2 package. I am doing simple sql query in node. so why does it tur public async getTests(req: Request, res: Response): Promise<void> { const pool = await connect();...

stackoverflow.com

https://github.com/sidorares/node-mysql2#using-promise-wrapper

 

GitHub - sidorares/node-mysql2: fast mysqljs/mysql compatible mysql driver for node.js

:zap: fast mysqljs/mysql compatible mysql driver for node.js - GitHub - sidorares/node-mysql2: fast mysqljs/mysql compatible mysql driver for node.js

github.com

 

 

*유의사항

- Node.js 공부 중인 인공지능공학과 학부생이 공부하여 남긴 정리입니다.

- 정확하지 않거나, 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다.

 

 

 

 

댓글