• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 server의 버튼 미실행 오류

server의 버튼 미실행 오류

7 글 보임 - 1 에서 7 까지 (총 7 중에서)
  • 글쓴이
  • #57359

    익명
    비활성
    server.js 파일 코드입니다
    
    //서버 실행 라이브러리: npm install express
    const express = require('express');
    const app = express();
    const bodyParser= require('body-parser');
    app.use(bodyParser.urlencoded({extended: true}));
    const MongoClient = require('mongodb').MongoClient;
    app.set('view engine','ejs');
    app.use('/public', express.static('public'))//퍼블릭안에 css 파일 사용 하겠습니다
    var db;
    MongoClient.connect('mongodb+srv://@cluster0.om8zy2z.mongodb.net/?retryWrites=true&w=majority',function(에러, client){
                db = client.db('todo');
                //db.collection('post').insertOne({이름:'조병준', 나이:'29', 성별:'남자',결혼:'미혼',_id:1},function(에러,결과){
                    //console.log('저장완료');
                //});
                app.listen(8090, function(){
                        console.log('listening on 8090')
                });
    });
    //누군가가 /pet 으로 방문을 하면 pet관련된  html서버를 띄워주자
    app.get('/pet', function(요청,응답){
        응답.send('펫 관련 사이트입니다.');
    });
    //누군가가 /beauty 으로 방문을 하면 beauty관련된  html서버를 띄워주자
    app.get('/beauty', function(요청,응답){
        응답.send('뷰티용품 쇼핑 홈페이지임');
    });
    //서버 재실행 라이브러리: npm install -g nodemon
    //서버에들어왔을때 html파일을서버에 띄우기
    app.get('/', function(요청,응답){
        응답.render('index.ejs')
    });
    app.get('/write', function(요청,응답){
        응답.render('write.ejs')
    });
    //어떤 사람이 /add 경로로 post 요청을 하면 ~~을 해주세요
    app.post('/add', function (요청, 응답) {
        db.collection('counter').findOne({name : '게시물갯수'}, function(에러, 결과){//counter라는 collection에 name:게시물갯수라는 데이터 1개를 꺼냅니다
          var 총게시물갯수 = 결과.totalpost//총게시물이라는 변수에 결과.totalpost를 저장합니다
      
          db.collection('post').insertOne({ _id : 총게시물갯수 + 1, 날짜 : 요청.body.date , 제목 : 요청.body.title }, function (에러, 결과) {//post라는 collection에 _id : 총게시물갯수 + 1, 날짜 : 요청.body.date , 제목 : 요청.body.title 이 데이터를 저장해주셈
            db.collection('counter').updateOne({name:'게시물갯수'},{ $inc: {totalpost:1} },function(에러, 결과){//counter라는 collection에 name:게시물갯수라는 데이터에 totalpost를 1씩 증가하겠습니다
          if(에러){return console.log(에러)}
            })
          })  
        })
        응답.send('전송이 완료되었습니다');//app.post('/add', function (요청, 응답) 에서 응답에 대한 함수 내용 : 누군가가 add경로로 post 요청이 오면 응답.send('전송완료')라는 글자를 띄워주셈
      })
     
    //post로 받은 정보 실행 라이브러리: npm install body-parser
    /*어떤사람이 /add로 라는 post요청을 하면, 데이터 2개(날짜,제목)을 보내주는데, 이때, "post"라는 이름을 가진 collection에 두개 데이터 저장하기
    {제목:'~',날짜:'~'}*/
    /*app.post('/add',function(요청,응답){
        응답.send('전송완료')
        console.log(요청.body.date)
        console.log(요청.body.title)
        db.collection('post').insertOne({제목:요청.body.date, 날짜:요청.body.title},function(에러,결과){
            console.log('저장완료');
        });
    });*/
    //누군가가 /list로 get요청을 하면 실제 DB에 저장된 데이터들로 꾸며진 HTML을 보여줌
    app.get('/list', function(요청,응답){
        db.collection('post').find().toArray(function(에러,결과){//디비에 저장된 'post'라는 collection안의 모든 데이터를 꺼내주세요
            응답.render('list.ejs',{posts:결과});//ejs 파일 보여줄때 쓰는 문법 html보여줄때 쓰는 문법과는 다름!!!
        });
    });
    /*ejs:html을 꾸밀수 있는 라이브러리
    ejs파일 장점:html기본틀에다가 서버데이터 삽입 가능!!!
    서버데이터 삽입시<%= 변수이름 %>으로 사용가능
    ejs파일 주의:views 폴더안에 ejs파일을 삽입해야 에러막을수 있음
                <%javascript 문법 %>을 쓰면 ejs안에서 javascript문법을 사용할수 있음*/
    app.delete('/delete', function(요청, 응답){
        요청.body._id = parseInt(요청.body._id)//ejs파일에서 body부분에 있는 $.ajax의 data값을 요청.body에 저장하고 요청.body의 _id값을 숫자형으로 치환한것을 다시 요청.body에 저장해주세요
        db.collection('post').deleteOne(요청.body, function(에러, 결과){//요청.body에 해당되는 데이터값을 post라는 collection에서 찾아서 그것을 삭제해주세요
            응답.status(200).send({message: '성공했습니다'})//요청을 성공으로 판정해주세요 그리고 서버에 성공했습니다라고 메세지를 띄워주세요
        })
    });
    // /detail로 접속하면 detail.ejs보여줌 detail/2로 접속하면 detail2.ejs 보여줌 ....
    app.get('/detail/:id',function(요청,응답){
        db.collection('post').findOne({ _id : parseInt(요청.params.id) }, function(에러, 결과){//detail/id로 들어오면 post라는 collection에서 id에 해당하는 결과 값을 가져오기
                응답.render('detail.ejs',{data:결과})//detail.ejs를 서버에 띄우기  
        })
    })
    
    list파일 코드입니다
    
    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
        <link rel="stylesheet" href="/public/main.css">
        <title>list</title>
      </head>
      <body>
        <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script>
        <%- include('nav.html') %>
        <!--<h4>할일 제목:<%= posts[0].제목 %></h4>
        <p>할일 마감날짜:<%= posts[0].날짜 %></p>
        <button>삭제</button>-->
    <div class="mt-4">
        <h4 class="text-center">서버에서 가져온 데이터</h4>
      <div class="container mt-4">
        <ul class="list-group">
          <% for (var i = 0; i < posts.length; i++){ %>
          <li class="list-group-item">
            <h4> 할일 날짜 : <%= posts[i].날짜 %> </h4>
            <p> 할일 제목 : <%= posts[i].제목 %> </p>
            <button class="btn btn-danger" data-id="<%= posts[i]._id %>">삭제</button>
            <button class="btn btn-primary" href="/detail/<%= posts[i]._id %>">이동</button>
         

          <% } %>    

      </div> </div>         <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>         <script>       $('.delete').click(function(e){           var 삭제 = e.target.dataset.id           var 지금누른것 = $(this)

            $.ajax({
              method : 'DELETE',
              url : '/delete',
              data : { _id : 삭제 }
            }).done(function(결과){
                console.log('성공했습니다')
                지금누른것.parent('li').fadeOut()
            }).fail (function(xhr,textStatus,errorThrown){
                console.log(xhr,textStatus,errorThrown)
            })
          });
        </script>
    </body>
    </html>
    detail파일 코드입니다
    
    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
        <link rel="stylesheet" href="/public/main.css"><!--css 파일 첨부 방법-->
        <title>list</title>
      </head>
      <body>
        <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script>
        <%- include('nav.html') %><!--nav.html을 첨부해주는 문법-->
    <div class="container mt-4"><!--좌우 여백 주는 부트스트랩 class명-->
       <h2 class="text-center">상세페이지</h2><!--글자 가운데 정렬 주는 부트스트랩 class명-->
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">날짜:게시물의 <%= data.날짜 %></h5>
            <p class="card-text">제목:게시물의 <%= data.제목 %></p>
            <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            수정하기
          </div>
        </div>
    </div>
    </body>
    </html>
    다름이 아니라 화면과 같이 삭제 이동 버튼은 있으나 삭제는 삭제버튼대로 이동은 이동버튼대로 작동이 안되고 작동이 안되어서 list.ejs에서와 같이
    삭제버튼을 누르고 눈속임으로 fade out이 되는지 확인을 할수가 없습니다 무엇이 잘못된거일까요?
     
    #57360

    익명
    비활성
    서버 화면 
    #57361

    익명
    비활성
    그리고 2강 마지막에 detail로 이동하는 버튼을 <button class="btn btn-primary" href="/detail/<%= posts[i]._id %>">이동</button>이렇게 코드를 짯는데요
    코드의 의도는 이동이라는 버튼을 만들어서 href=라고 하면 html css특강과 같이 다른 사이트로 이동할수 있다고 하셔서 여기에 /detail/<%= posts[i]._id %>와 같이 링크를 달아서
    이 링크대로 이동할수 있게 하고 각각 내용들이 id값이 다르기에 for 문을 돌리고 있기 때문에 detail/숫자 대신에 detail/<%= posts[i]._id %> 와 같이 코드를 짯습니다 문제있으면 말씀 부탁드리겠습니다
    #57392

    codingapple
    키 마스터
    삭제버튼에 delete 클래스명이 없나봅니다 
    반복문써도 상관없습니다
    #57514

    익명
    비활성
    이동버튼은요?
     
    #57520

    익명
    비활성
    아 오타였나봅니다 delete 대신 delect를 썻습니다 그런데 이동버튼은 작동 하지 않습니다 문제가 무엇인가요?
    #57543

    codingapple
    키 마스터
    href="" 는 <a>태그에만 적을 수 있습니다
7 글 보임 - 1 에서 7 까지 (총 7 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠