Node.js-MySQL-3

allzeroyou·2022년 1월 25일
0

Node.js-MySQL

목록 보기
3/7
post-thumbnail

MySQL로 글을 선택했을 때 보이는 페이지 상세보기를 구현해보자

Step1. 온고지신(기존 코드를 익히고 미루어 새것을 알자)

  1. 상세보기 페이지를 구현하는 기존 코드를 주석처리
  2. 코드의 첫번째 줄은 글 목록을 가져오는 걸 구현한 코드임(우리 이 기능 어디서 많이 보지 않았나? 떠올랐다면 집중해서 따라오고 있다는 것. 저번 글에서 작성한 기능이다. 따라서 작성한 코드 복붙하자)

  1. querystring의 값을 유심히 관찰하자. querystring의 값은 mysql의 id 컬럼에 따라 결정됨을 알 수 있다.
  2. 그럼 querystring의 값에 따라 데이터를 가져오는 코드를 작성하자.

Step2. 글을 클릭했을때 드디어 내용이 보이는거야?

  1. mysql의 쿼리문으로 id가 3인 값을 가져오려면 SELECT * FROM topic WHERE id=3;이라고 작성하면 끝. 그럼 이걸 이용해 코드를 작성해보자.
  2. 이때 id의 값은 queryData.id임을 주의하자!
  3. 에러가 있을 수 있으니 콜백 함수를 이용해 error2와 결과의 파라미터로 topic을 준다.
  4. 코드를 잘 보자. topics 데이터를 가져온다음, id값으로 topic 값을 가져오는 동작이다!
  5. 그 후 웹페이지를 구성하는 코드. 그러나 topics 목록을 가져오지 못했거나, 특정 아이디의 topic 상세정보를 가져오지 못했다면?

  1. if-throw 절을 작성해 에러가 있을때, node.js가 그 다음 코드를 실행시키지 않고 에러를 콘솔에 표시 및 즉시 어플리케이션을 중지한다.

  1. topic 값이 잘 들어오는지 console.log을 이용해 확인.

Step3. topic 값이 잘 들어오지 않는데... 어떡하지?

  1. console.log(topic.title)로 데이터가 잘 연동되는지 확인했으나 원하는 값이 나오지 않는다면?
  2. console.log(topic)을 해봤을때 console에 출력된 결과를 확인한 결과 topic은 배열이다. 따라서 배열로 취급한 코드를 작성해야!

  1. console.log(topic[0].title)로 수정한 후, 웹 페이지를 reload 해보니 title의 값을 잘 받아옴을 알 수 있다!

  1. title은 topic[0].title로 받아왔다. 그럼 내용은 어떻게 받아올까? 그렇다. topic[0].description인 것이다.

Step4. 보안에 대해 고찰한 더 나은 코드

  1. 기존 코드에서 ~~ id=${querystring.id}처럼 id 를 값으로 받게 되면 데이터베이스 코드 특성상 공격 받기 쉽다. 사용자가 입력한 정보는 무조건 불신해야 함을 잊지 말자.
  2. 더 나은 코드로서 ~~ id = ?을 이용한다. ?의 값을 두 번째 인자배열에 담아준다. reload 시 값이 같음을 확인 할 수 있다.
  3. [ ]의 값이 sql문으로 치환되고 이때 공격 가능성이 있는 정보는 세탁해주는 처리를 자동으로 해주어 훨씬 더 나은 코드이다!

Step5. update와 delete를 빼먹으면 서운하지

  1. 기존 코드에서 update와 delete의 기능을 가져오자.
  2. 기존 코드에서sanitizedTitle 값을 queryData.id로 바꿔준후 설레는 마음으로 reload 해보자.
    반갑다! update, delete야!
profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글