Node.js - MySQL

Node.js MySQL 모듈의 기본 사용방법

수업소개

Node.js의 MySQL 모듈의 기본적인 사용방법을 알아봅니다. 

Node.js MySQL 모듈 바로가기

npm install -S mysql

 

 

 

강의

 

 

 

소스코드

nodejs/mysql.js

var mysql      = require('mysql');
// 비밀번호는 별도의 파일로 분리해서 버전관리에 포함시키지 않아야 합니다. 
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'opentutorials'
});
 
connection.connect();
 
connection.query('SELECT * FROM topic', function (error, results, fields) {
    if (error) {
        console.log(error);
    }
    console.log(results);
});
 
connection.end();

 

댓글

댓글 본문
  1. labis98
    20210801 새로운 시작!!!
  2. 해밀턴
    감사합니다 덕분에 해결됐습니다.
    대화보기
    • kimkiki
      덕분에 해결했네요 정말 감사합니다
      대화보기
      • freebear
        이 방법으로 해결 되었습니다. 감사합니다.
        mysql 5.7 버전 이후 유저테이블에 password 라는 컬럼이 없어졌던데 이게 문제인거 일까요
        대화보기
        • aminora
          npm install mysql 실행시 npm WARN saveError ENOENT: no such file or directory, open~~~ 어쩌구 뜨실경우
          터미널의 경로가 node.js-mysql-1인지 확인해주세요
          (터미널에 dir을 입력시 package.json이 있어야합니다!)

          .../nodejs/node.js-mysql-1> npm install -S mysql 또는 npm install mysql로 설치하시면 됩니다

          또한 mysql에 관하여 수정하기 전에 cmd가 관리자 실행으로 실행했는지도 확인하세요
        • Jong Hun Park
          SQL 접속과 관련 Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
          이런 증상이 나시는 분은 하단 주소
          https://iflue.tistory.com/141 해당 링크의 내용을 참고하세요.. 저는 이 방법으로 한번에 해결 했습니다.
          참고 해당 문제는 mysql 5.7이전 버전과 이후 버전의 테이블 구조 변경으로 발생된 문제라고 한다.
          해결 방법은 비밀 번호를 다시 한번 설정하면 끝이다.

          ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '변경할비밀번호';

          mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'pw123';
          Query OK, 0 rows affected (0.07 sec)

          저와 같은 초보에게 도움이 되길 바랍니다.
        • hanel_
          21.3.20
        • jeisyoon
          2021.03.09 모듈 기본 사용방법 - OK
        • 마아앙
          2021.02.16
        • 강지은
          1. 첫번쨰 오류
          connect
          >> port 먼저 설정해보기
          var connection = mysql.createConnection({
          host : 'localhost',
          user : 'root',
          password : '111111',
          database : 'opentutorials',
          port : 3306
          });

          2. 포트 설정 후 두번째 오류

          인프런에서 찾은
          client does not support authentication protocol
          오류 해결 방법

          ramti _ 2018.08.06
          mysql installer > server 옆에 reconfigure > Auth 설정가서 legacy 선택 > 완료 하면 잘 됩니다~
          (출처 : https://www.inflearn.com......637 )
          ramti님 덕분에 바로 해결!
        • Web111
          밑에 댓글에 있는 mysql> alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '비ㅡ번';
          이 방법이랑 윗 동영상 두번째에 설명되어있는 새로운 유저를 만들어서 접속하는 방법 둘다 했는데도 여전히
          code: 'ER_ACCESS_DENIED_ERROR',
          errno: 1045,
          sqlMessage: "Access denied for user 'newUser'@'localhost' (using password: NO)",
          뜨면서 실행이 안되는데 저랑 같은분 계신가요??
        • 2021.01.05완
        • 생활둘기
          2021 1 2
        • 김지호
          $ node mysql.js 실행하면
          code: 'ER_BAD_DB_ERROR',
          errno: 1049,
          sqlMessage: "Unknown database 'opentutorials'",
          sqlState: '42000',
          fatal: true

          에러가 발생하여
          var connection = mysql.createConnection({
          host : 'localhost',
          port : 3307,
          user : 'root',
          password : '******',
          database : 'opentutorials'
          });
          처럼 port 속성을 주니 해결됬습니다.
          아마 MariaDB가 설치되어 있어서 MariaDB가 3306을 사용하고 MySQL이 3307 포트를 사용하는 것 같습니다.

          21 01 02
        • 콜라
          20201021 완료
        • 조아라
          말씀하신대로 하니깐 잘되네요 감사합니다
          대화보기
          • ldhan0715
            after가 아니라 alter인것 같네요..
            대화보기
            • Jonghwo Lee
              Code: 'ER_NOT_SUPPORTED_AUTH_MODE',
              errno: 1251,

              해결법
              mysql> after user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '비ㅡ번';
            • 홍승기
              Error: ER_NOT_SUPPORTED_AUTH_MODE 가 뜨시는 분들은

              var mysql = require("mysql2"); 로 사용하시고

              콘솔창에서 npm install mysql2 로 install 하여 사용하시면 오류 해결됩니다!
            • 코딩꿈나뮤
              아니 계속 root user로 실행되서 왜그런가 했더니 위에 코드 수정한걸 저장을 안하고 있었네 ㅋㅋㅋㅋㅋㅋㅋ
            • 준바이
              감사합니다
            • ㄱㅎㅈ
              진짜 너무 감사합니다. ㅠㅠ
              대화보기
              • 이바름
                저도 이 문제때문에 한참을 찾았었는데요..
                mysql을 설치할때 -S를 안쓰고 그냥 설치할때 환경변수가 이전 프로젝트에 고정되어서 그런거 같아요.

                해결방법은 "set NODE=.&& node app"를 터미널,cmd에 입력하시면 되는데...
                정확히 저게 무슨뜻인지는 잘 모르겠어요.

                그나마 도움이 되고자 올려봅니다.
                대화보기
                • codinginpain
                  완료쓰
                • codinginpain
                  완료쓰
                • 강다리
                  달림
                • 굼벵이
                  완료
                • CronEB
                  done
                • host가 localhost가 아니라 root로 다 뜨는데 ,,,뭐가 문제져
                • 감사합니다!! 덕분에 해결되었습니다!
                  대화보기
                  • johnAhn
                    'Client does not support authentication protocol requested by server; consider upgrading MySQL client' 이런 에러 발생하면 아래의 스택오버플로우 내용 참조하셔서 변경하시면 됩니다.

                    https://stackoverflow.com......ver
                  • sanghak.lee
                    Client does not support authentication protocol requested by server; consider upgrading MySQL client
                    이런 오류가 떠서 구글링해봤더니 테이블 데이터를 바꿔주라고 되어 있는데 바꿔도 계속 이런 오류가 뜹니다 ㅜㅜ
                  • devs
                    포트번호 설정하니까 한번에 해결됐어요! 감사합니다 :)
                    대화보기
                    • 키리모찌
                      AUTH_MODE에러가 나시는 분들은
                      https://stackoverflow.com......951

                      확인해보세요.
                    • 이예에에에
                      감사합니다!!!!
                      대화보기
                      • 와이에스
                        <인증실패로 접속이 안되는 분들 참고하세요>
                        MySQL 8.0에서는 사용자 인증방법이 caching_sha2_password만 사용하게 되었기 때문에
                        강제로 mysql_native_password를 사용하게 바꿔주던지, caching_sha2_password를 지원하는 connector를 사용해야 합니다. 인증방법을 새버전에서 지원하지 않는 구버전의 인증방법으로 바꾸는 것은 보안상 좋지 않은 방법이라고 합니다. 그래도 공부하실때는 쉽게 접속이 가능하니 참고하시기 바랍니다. java쪽은 지원 커넥터들이 나왔있다고 하는데 검색해서 찾아보시면 될것 같네요 PHP는 아직 없는것 같아서 힘들었습니다만,,,, 그래도 인증방법을 바꾸는게 더 쉽죠. ㅋㅋㅋ
                        도움이 되셨길 바랍니다.

                        <1번방법 : root계정의 인증방법 강제로 바꿈>
                        ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';

                        <2번방법 : 새로운 유저를 만들어 인증방법을 구버전을 적용하도록 함>
                        CREATE USER 'newUser'@'%' IDENTIFIED WITH mysql_native_password BY 'YourUserPassword';
                        GRANT ALL PRIVILEGES ON opentutorials.* TO 'newUser'@'%';
                        FLUSH PRIVILEGES;
                      • AfterMemory2019
                        혹시

                        npm install -S mysql

                        이 구문 안치셧나요? 오류 메세지를 보니까 node.js에 mysql 모듈이 설치되지 않은듯 합니당
                        대화보기
                        • 최지현
                          자바 스크립트 파일에서요. 함수 생성하고 mysql모듈 불러왔는데요.
                          createFunction: function(){
                          var mysql = require('mysql');
                          }

                          Uncaught Error: Cannot find module 'mysql'
                          이러한 오류가 계속 발생하네요 ㅠㅠ. npm -s mysql은 당연히 했고요. npm install까지 해서 확실히 node_moudules폴더에 모듈이 저장이 되었습니다.
                          오류를 어떻게 해결해야 할까요? ㅠ
                        • 권문수
                          감사합니다^^ mysql 모니터와 노드.js 에서의 실행은 둘 다 똑같은 mysql 의 클라이언트로써의 작동을 알기위함이었군요. 클라이언트로써의 작업은 수동적인 모니터보다 노드js 쪽이 훨씬 좋다는걸 알았습니다. 감사합니다^^
                        • 바람의밥심
                          저는 연결은 잘 되는데...
                          특정 데이타를 INSERT 할때 에러가 나오네요..

                          SQL 실행 시 에러 발생함. - Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x92\x9C' for column 'description' at row 2

                          찾아보니 이모티콘과 같은 데이타를 넣기 위해서는 4byte 가 필요해서 utf8 이 아닌 utf8mb4 로 적용되어야 된다는데...
                          아래와 같이 다 설정하고 mysql 내렸다가 올렸는데도 동열한 에러가 발생되네요...

                          my.ini (윈도우에서 사용)
                          [client]
                          default-character-set = utf8mb4

                          [mysql]
                          default-character-set = utf8mb4

                          [mysqld]
                          character-set-client-handshake = FALSE
                          character-set-server = utf8mb4
                          collation-server = utf8mb4_unicode_ci
                        • 나마코엘
                          아.. 저도 한번에 안되네요..
                          code: 'ER_ACCESS_DENIED_ERROR', 에러 메시지와 함께..
                          mysql 계정을 localhost랑 %랑 127.0.0.1랑 각각 다 계정 만들고, 권한 부여하고 비번 재설정 해도 안되네요.
                          toad 같은 툴로 연결하면 또 접속이 됩니다.
                          결국엔
                          mysql.js 파일의 host IP를 localhost 대신 실제 부여받은 IP로 입력하니 제대로 동작은 합니다.
                          뭔가 권한이나 계정 정보 문제 같긴 한데 쉽게 해결되지가 않네요..
                          일단.. 실제 IP 입력으로 진행해봐야겠어요.. ㅜㅜ 아 찝찝..

                          ---------------------------------
                          다음날 환경 요소 확인해보니 mysql에 2개 띄워져 있어서 발생하는 문제로 해결됨.
                          클라이언트 툴은 원하는 mysql DB로 연결되었으나 nodejs 예제는 다른 mysql로 연결을 시도하여 발생.
                        • 비전공자
                          저는 mysql.js 파일 만들 때 입력하는 password랑 처음 mysql 설치하면서 만들었던 password가 일치하지 않아서 오류가 떴었네요.
                          'Access denied for user \'root\'@\'localhost\' (using password: YES)',
                          혹시 이런 오류 메시지 받았던 분들은 password 부분 수정해보세요~
                        • lc_h22
                          code: 'ER_NOT_SUPPORTED_AUTH_MODE',
                          errno: 1251,
                          sqlMessage:
                          'Client does not support authentication protocol requested by server; consider upgrading MySQL client'

                          두번째 영상을 참고했는데두 요게 뜨네요..
                          어떻게 해결 해야 하나요??ㅠㅠ
                        • 5tarlight
                          자꾸 접근이 거절되서 아래 영상보고도 거절되서 왜 그러지 했는데 포트를 3333으로 바꿔놨었다..!
                        • 나나
                          혹시 kill 하는 방법도 알려 주실 수 있을까요?
                          대화보기
                          • 일단시작하고본다
                            혹시 아래 영상을 따라해도 오류가 나시는 분들은,
                            윈도우 cmd 창에서 netstat -ano | findstr :3306 명령어를 수행해 보신 후에,
                            3306 포트를 사용하는 프로세스가 2개 이상인지 확인해 보시길 바랍니다.
                            2 개 이상이시라면 둘 중 하나를 kill 하시면 정상적으로 동작합니다.
                            제가 이런 경우라서 왜 그런지 계속 찾다보니,
                            그냥 mysql 과 bitnami wampstack 의 mysql 프로세스가 3306 포트를 동시에 사용하고 있었더라구요.
                          • jo_onc
                            감사합니다^^
                            대화보기
                            • jo_onc
                              와우 MySQL을 nodejs로 컨트롤 가능하군요!
                              엄청 편하네요!
                              감사합니다~
                            • 누누
                              혹시 진행중에 'Error: ER_NOT_SUPPORTED_AUTH_MODE'가 발생하시는 분은
                              https://stackoverflow.com......toc

                              참고하시기 바랍니다.
                            • piper
                              감사합니다 덕분에 에러 해결했어요ㅎㅎ
                              대화보기
                              버전 관리
                              egoing
                              현재 버전
                              선택 버전
                              graphittie 자세히 보기