티스토리 뷰

 

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();

 

 

 

 

 

 

 

 

 

잘 출력되는 것을 확인할 수 있습니다.

 

 

 

 

 

 

감사합니다.

 

 

 

[참고자료]

 

 

[#. mySQL] ER_NOT_SUPPORTED_AUTH_MODE 에러 해결하기

node 서버에서 mySQL를 연동해서 실행하려고 하는데 Client does not support authentication protocol requested by server; consider upgrading MySQL client 에러가 발생한다 해결하기 위해 mySQL에 접속해서..

developer0809.tistory.com

 

 

 

MySQL 연동 | PoiemaWeb

Node.js(express)와 MySQL 연동

poiemaweb.com

 

 


 

 

 

공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

 

 

 

댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday