티스토리 뷰
Node.js v16.13.1
MySQL v8.0.28
버추얼 박스 우분투 가상 머신에서 진행합니다.
Node.js와 MySQL을 연동하고 RowDataPacket에서 값을 뽑아내는 방법을 다룹니다.
모듈과 코드를 저장할 적절한 폴더를 하나 생성해 줍니다.
저는 Node_MySQL로 이름을 정했습니다. ㅎㅎ
그리고 해당 디렉토리에서 터미널을 열어줍니다.
이제 모듈을 설치하겠습니다. 아래 명령어를 실행합니다.
$ npm install express mysql
그리고 js파일을 하나 만들어 해당 폴더에 저장합니다. 저는 gedit를 사용하겠습니다.
그리고 MySQL 모듈을 탑재하고 접속할 계정과 사용할 데이터베이스의 정보를 입력해 줍니다.
host : 호스트
user : 계정
password : 비밀번호
database : 데이터베이스
그리고 이제 연결을 할건데, 코드 실행시 ER_NOT_SUPPORTED_AUTH_MODE 에러가 뜬다면
MySQL 서버에 접속해 아래 명령어를 입력해 주면됩니다.
mysql -u [계정] -p
ALTER USER '[계정]'@'[호스트]' IDENTIFIED WITH mysql_native_password BY '[비밀번호]';
코드를 보면 다음과 같습니다.
계정정보를 입력하고 connect(); 함수로 연결을 시도하는 코드입니다.
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : '---',
password : '---',
database : 'mysql'
});
connection.connect();
connection.end();
이제 node 명령어로 파일을 실행시킵니다.
오류 메시지가 뜨지 않는다면 연결 성공입니다.
이제 데이터 베이스에서 데이터를 가져와 보겠습니다.
저는 미리 아래와 같은 테이블을 만들어 두었습니다.
똑같은 테이블을 만드려면 아래 쿼리문을 사용하면 됩니다.
// 테이블 생성
CREATE TABLE member (
seq INT NOT NULL AUTO_INCREMENT,
id VARCHAR(20),
pw VARCHAR(100),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
// 값 삽입
insert into member values (null, 'a', '123');
insert into member values (null, 'b', '456');
insert into member values (null, 'c', '789');
데이터를 가져오는 방법은 아주 간단합니다.
만들어둔 연결 객체에 query메소드로 원하는 쿼리문을 넣어주면 됩니다.
코드를 다음과 같이 수정하고 실행시켜 보겠습니다.
const mysql = require('mysql');
const connection = mysql.createConnection({
// 계정 정보
});
connection.connect();
connection.query('SELECT * FROM member', (error, rows, fields) => {
if (error) throw error;
console.log(rows);
});
connection.end();
error에는 에러의 정보가 들어있고 rows에는 데이터베이스의 각 튜플, fields에는 튜블의 자세한 정보가 들어있습니다.
실행 결과를 보니 RowDataPacket의 형태로 데이터가 잘 조회된 것을 확인할 수 있습니다.
RowDataPacket에서 특정 값을 가져오고 싶다면 rows[조회된 튜플의 행번호][속성이름]또는
rows[조회된 튜플의 행번호].속성이름 을 사용하면 됩니다.
저는 반복문을 사용해 다음과 같이 id를 가져와 봤습니다.
const mysql = require('mysql');
const connection = mysql.createConnection({
// 계정 정보
});
connection.connect();
connection.query('SELECT * FROM member', (error, rows, fields) => {
if (error) throw error;
for(var i in rows){
console.log(rows[i].id);
console.log(rows[i]['id']);
}
});
connection.end();
잘 출력되는 것을 확인할 수 있습니다.
감사합니다.
[참고자료]
공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.
'JS | Node.js' 카테고리의 다른 글
[JS]JavaScript와 Node.js (0) | 2023.11.07 |
---|---|
[Node.js] npm과 package.json (0) | 2023.11.03 |
[Node.js] Socket.IO 채팅 프로그램 만들기 (0) | 2022.01.07 |
[Node.js] Express 웹 서버 구축 하기 (0) | 2022.01.04 |
[JS] 네이버 지도 API 클라이언트 아이디 발급 받기 (0) | 2022.01.03 |