본문 바로가기

WebApp/Node.js-MySQL

Node.js-MySQL

1. Node.js에서 MySQL 연동하기

1. npm install --save mysql로 mysql package 설치하기

 

 

2. mysql.js 파일 생성후 node.js를 mysql client로써 사용할 수 있게 해주는 module을 불러오는 코드 작성 후

관련 api 코드를 작성하면

기존에 mysql server에 생성해놓았던 database table을 객체의 형식으로 가져올 수 있다

 

*본질적으로는 아래의 코드만으로 작성가능 

connection.query('SELECT * FROM topic'function (errorresults) {

console.log(results);

}); //첫번째 인자는 sql문이 오고 두번째인자는 첫번째 인자의 sql문이 실행된 후에 서버가 응답할 것인데 그 응답된 결과를 우리가 처리할 수 있도록 두번째 인자로 콜백함수를 주게 되어 있는데 그 콜백함수의 첫번째 인자로 에러가 있을 경우에를 응답해주는 에러정보인자가 담기고 결과가 성공적일때는 두번째 인자로 results라는 sql문의 실행결과가 담기도록 약속되어 있다. 이 results값을 console.log해보면 배열 안의 객체형식으로 나타난다

 

 

 

 

2. db로 home화면 및 list구현

이전에 readdir을 사용하여 가져온 배열형식의 파일목록을 한번에 나열하는 방식으로 list를 작성했듯

db.query를 사용하여 가져온 배열형식의 db를 한번에 나열하는 방식으로 list작성

*다만 db는 객체형식으로 가져와지기 때문에 객체내의 속성을 지정해줘야한다

ex)우측예제에서 topics.id 와 topics.title

 

 

3. db로 id값이 있는 경우 본문 구성

1.topic 테이블을 가져오고

2. 그 안의 id값이 queryData.id인(위 예제에서는 id=5) table 행(5행)을 가져오고

3.가져온 table5행은 배열안의 객체 형식으로 가져오게되며 이것을 topic이라는 변수에 넣고

4.화면을 구성한다

*두번째줄의 db.query(`SELECT * FROM topic WHERE id=${queryData.id}`,function(error2,topic){}

은 보안문제가 있어 이를 해결하기위해 

db.query(`SELECT * FROM topic WHERE id=?,[queryData.id]`,function(error2,topic){}

로 대체한다

id=?를 쓰고 ? 값이 무엇인지를 두번째 인자로 배열에 담아서 주는 것이다.

이러면 이전의 id값에 공격의 의도가 있는 것을 넣을 수 있는상황을 세탁해준다

 

4. db로 create 구성

 

1. pathname=create 인경우 UI를 구성

2. create UI를 작성하고 제출했을때 form에 의해 이동하는 /process_create 구성

3. db.query의 첫번째 인자로 새로운 행을 추가하는 sql문 작성 INSERT INTO topic () VALUES ()

4. db.query의 두번째 인자로 첫번째인자의 ?에 들어가는 코드를[]배열안에 작성

5. db.query의 세번째 인자로 에러와 응답에 관한 콜백함수 작성

6. 콜백함수의 내용은 위 과정을 수행 후 3번째 과정에서 만들어져 삽입된 행의 id값(result.insertId)으로

 주소를 이동시킴

7. 그러면 id값이 있는 경우(http://localhost:3000/?id=result.insertId)의 본문구성으로 들어가 해당 화면 구성

 

 

5. db로 update 구성

1. update를 클릭했을때 db.query('SELECT * FROM topic`,function(error,topics){}로 topic 전체 테이블을 가져오고

2. 그안에서 db.query('SELECT * FROM topic WHERE id=?`,[queryData.id],function(error,topics){}로 id값이 있을때 그 id값에 해당하는 table 1행을 가져오도록한 후(이는 배열안의 객체형식으로 가져옴)

3. update UI작성

4.post로 날리는 정보는 각각 name이 의미하는 id, title, description에 의해 날라가는데 id는 hidden정보로 현재 페이지의 id값이 고정으로 날라가고 title과 description은 새로 작성한 내용으로 날라감

5.날라온 post정보를 잡아서 table의 정보를 바꾸는 sql문을 이용하여 정보를 바꾸고 

6.날라온 post의 id값주소로 페이지를 리로드

 

6. db로 delete 구성

id값이 있는 경우 delete form

1.id값이 있는 경우에 페이지에 생성되어 있는 delete form 확인

2.quertData.id의 값이 hidden되어 무조건 /process_delete로 post.id값으로 날라오므로

3./process_delete에서 그걸 잡아서 해당하는 id값의 행을 삭제하는 sql문을 이용하여 삭제

4.다시 home 주소로 보내기

'WebApp > Node.js-MySQL' 카테고리의 다른 글

Node.js - MySQL security  (0) 2020.09.07
Node.js-MySQL ,authorlist CRUD  (0) 2020.09.03
Node.js-MySQL-module로 정리정돈  (0) 2020.09.02
Node.js-MySQL JOIN  (0) 2020.08.31