-
URL 파라미터Node.js,MongoDB 2022. 4. 7. 13:48
각 글을 누르면 상세페이지로 이동하게 만들어보자.
상황을 보면 글번호1을 누르면 detail1.ejs로 가고 글번호 4를 누르면 detail.ejs로 가야한다.
파일을 여러개 만드는 것도 방법이겠지만
간단하게 만들 수 있다.
// /detail로 접속하면 detail.ejs보여줌 detail1로 접속시 detail1.ejs로 가게하기 app.get('/detail/:id', function(요청, 응답){ //:id를 입력하면 detail/어쩌구로 GET요청을 하면 이란 뜻임 URL Parameter로 불림 db.collection('post').findOne({ _id : parseInt(요청.params.id) }, function(에러, 결과){ //요청.params.id는 파라미터 중 :id라는 뜻 console.log(결과); 응답.render('detail.ejs', { data : 결과 }) }) })
detail페이지로 이동시켜야 하므로 app.get을 이용한다. url을 적을 때 :id를 적어서 detail뒤에 어떤 걸 적으면 이동하게끔 만들어줄 수 있다. url파라미터라고 부른다.
접속하면, db.collection을 이용해 post라는 collection에서 _id가 detail/:id에서 id에 적힌 값을 찾아오게끔 하면 된다.
요청.params.id라고 적으면 파라미터의 id를 불러오고 현재 문자형이고 mongoDB에선 숫자형이므로 parseInt로 숫자로 바꿔주면 된다.
그리고, 응답.render을 이용해 나온 결과를 data라는 변수에 담아주면 된다.
<h4>상세페이지</h4> <h4>제목 : <%= data.제목 %></h4> <h4>날짜 : <%= data.날짜 %></h4>
detail.ejs파일에서 ejs문법을 이용해 이렇게 적어주면 detail/2로 접속하면 2번글의 상세페이지가 보이게 된다.
여기서, MongoDB에 저장하지 않은 detail/391 이런 391번째 상품에 들어가면 "존재하지 않는 상품입니다"라는 페이지가 뜨게 해보자.
app.get('/detail/:id', function(요청, 응답){ db.collection('post').findOne({ _id : parseInt(요청.params.id) }, function(에러, 결과){ if (결과 == null) { return 응답.render('error.ejs'); } else { console.log(결과); 응답.render('detail.ejs', { data : 결과 }); } }) })
if문을 이용해서 결과가 null일 때 error.js라는
<h4>존재하지 않는 상품입니다.</h4>
.ejs파일을 render해주면 된다.
'Node.js,MongoDB' 카테고리의 다른 글
글 수정하기 (edit기능) (0) 2022.04.12 css 사용 (0) 2022.04.08 ajax로 삭제요청 (0) 2022.04.06 게시물 각각에 번호달기(numbering) (0) 2022.04.04 HTML에 DB데이터 넣기 (0) 2022.04.04