ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.