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

home2 게시판 Node.js, Express 게시판 글 수정 기능1, 2 문의

글 수정 기능1, 2 문의

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

    허다희
    참가자

    const express = require('express');
    const res = require('express/lib/response');
    const app = express();
    const MongoClient = require('mongodb').MongoClient;
    const bodyParser = require('body-parser')
    app.use(bodyParser.urlencoded({extended : true}));
    const methodOverride = require('method-override');
    app.use(methodOverride('_method'));
    app.set('view engine', 'ejs');

    app.use('/public', express.static('public'));

    var db;
    MongoClient.connect('mongodb+srv://admin:q1w2e3r4@cluster0.8pbg7.mongodb.net/todoapp?retryWrites=true&w=majority', function(에러, client){
        if (에러) return console.log(에러)

        db = client.db('todoapp');

       
        app.listen('8080', function(){
          console.log('listening on 8080')
        });
    })

    app.get('/', function(req, res){
        res.render('index.ejs');
    });

    app.get('/write', function(req, res){
        res.render('write.ejs');
    });

    app.post('/add', function(요청, 응답){
        응답.send('전송완료');
        db.collection('counter').findOne({name : '게시물갯수'}, function(에러, 결과){
            console.log(결과.totalPost)
            var 총게시물갯수 = 결과.totalPost;

            db.collection('post').insertOne({ _id : 총게시물갯수 + 1, 제목: 요청.body.title, 날짜: 요청.body.date }, function(에러, 결과){
                console.log('저장완료');
                db.collection('counter').updateOne({name : '게시물갯수'},{ $inc : {totalPost:1} },function(에러, 결과){
                    if(에러){ return console.log(에러)}
                })
            });

           
        });
    });

    app.get('/list', function(요청, 응답) {

        db.collection('post').find().toArray(function(에러, 결과) {
            console.log(결과);
            응답.render('list.ejs', { posts : 결과});
        });

    });

    app.get('/search', (요청, 응답) => {
        var 검색조건 = [
            {
                $search: {
                    index: 'titleSearch',
                    text: {
                        query: 요청.query.value,
                        path: '제목'  // 제목날짜 둘다 찾고 싶으면 ['제목', '날짜']
                    }
                }
            },
            { $sort : { _id : 1 } },
            { $limit : 10 },
            { $project : { 제목: 1, _id: 1, score: { $meta: "searchScore" } } }
        ]
        db.collection('post').aggregate(검색조건).toArray((에러, 결과)=>{
            console.log(결과)
            응답.render('search.ejs', { posts : 결과 })
        })
    })

    app.delete('/delete', function(요청, 응답){
        console.log(요청.body)
        요청.body._id = parseInt(요청.body._id);
        db.collection('post').deleteOne(요청.body, function(에러,결과){
            console.log('삭제완료');
            응답.status(200).send({message: '성공했습니다'});
        })

    })

    app.get('/detail/:id',function(요청,응답){
        db.collection('post').findOne({_id : parseInt(요청.params.id)}, function(에러, 결과){
            console.log(결과)
            응답.render('detail.ejs', {data : 결과})
        })
    })

    app.get('/edit/:id', function(요청, 응답){
        db.collection('post').findOne({_id : parseInt(요청.params.id)}, function(에러, 결과){
            console.log(요청.params.id)
            응답.render('edit.ejs', {post : 결과});

        })
    });

    app.put('/edit', function(요청, 응답){
        db.collection('post').updateOne({_id: parseInt(요청.body.id) }, {$set : { 제목: 요청.body.title, 날짜: 요청.body.date }}, function(에러, 결과){
            // console.log('수정완료');
            console.log(요청.body.id);
            // console.log(요청.body.title,요청.body.date);
            응답.redirect('/list');
        })
    });

    const passport = require('passport');
    const LocalStrategy = require('passport-local');
    const session = require('express-session');
    const { render } = require('express/lib/response');

    app.use(session({secret : '비밀코드', resave : true, saveUninitialized: false}));
    app.use(passport.initialize());
    app.use(passport.session());

    app.get('/login',function(요청, 응답){
        응답.render('login.ejs')
    });

    app.post('/login', passport.authenticate('local', {
        failureRedirect : '/fail'
    }), function(요청, 응답){
        응답.redirect('/')
    });

    app.get('/mypage', 로그인상태, function(요청, 응답){
      console.log(요청.user)
      응답.render('mypage.ejs', {사용자 : 요청.user})  
    })

    function 로그인상태(요청, 응답, next){
        if(요청.user){
            next()
        } else {
            응답.send('로그인 정보가 없습니다.')
        }
    }

    passport.use(new LocalStrategy({
        usernameField: 'id',
        passwordField: 'pw',
        session: true,
        passReqToCallback: false,
      }, function (입력한아이디, 입력한비번, done) {
        //console.log(입력한아이디, 입력한비번);
        db.collection('login').findOne({ id: 입력한아이디 }, function (에러, 결과) {
          if (에러) return done(에러)

          if (!결과) return done(null, false, { message: '존재하지않는 아이디요' })
          if (입력한비번 == 결과.pw) {
            return done(null, 결과)
          } else {
            return done(null, false, { message: '비번틀렸어요' })
          }
        })
      }));

      passport.serializeUser(function(user, done){
          done(null, user.id)
      });

      passport.deserializeUser(function(아이디, done){
          db.collection('login').findOne({id : 아이디}, function(에러, 결과){
              done(null, 결과)
          })
      });

     

     

     

     

     

    <!doctype html>
    <html>
      <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

        <title>Hello, world!</title>
      </head>
      <body>
       
        <%- include('nav.html') %>
       
        <div class="container mt-4">
            <form action="/edit?_method=PUT" method="POST">
                <div class="form-group">
                <label>할일</label>
                <input type="text" vlaue="<%= post._id %>" name="id" style="display: none;">
                <input value="<%= post.제목 %>" type="text" class="form-control" name="title">
                </div>
                <div class="form-group">
                <label>Due date</label>
                <input value="<%= post.날짜 %>" type="text" class="form-control" name="date">
                </div>
                <button type="submit" class="btn btn-primary">Submit</button>
            </form>
        </div>
        <!-- Optional JavaScript; choose one of the two! -->

       
        <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/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js" integrity="sha384-VHvPCCyXqtD5DqJeNxl2dtTyhF78xXNXdkwX1CZeRusQfRKp+tA7hAShOK/B/fQ2" crossorigin="anonymous"></script>
       
      </body>
    </html>

     

     

    put요청 updateOne 데이터 수정이 안됩니다.

    mongoDB collection에 가서 확인해도 데이터가 수정이 안돼있어요.

     

    #28125

    codingapple
    키 마스터

    서버에서 요청.body 출력해보면 데이터들이 잘 담겨있습니까

    없으면 요청이 뭔가 잘못된 것입니다 

    #28136

    허다희
    참가자

    console.log(요청.body);
    { id: '', title: '일하기', date: '2/24' }

    body를 출력했을 때 date는 수정한 대로(24일) 잘 나오는 것 같아요

    #28145

    codingapple
    키 마스터

    ejs 파일에 

    <input type="text" vlaue="<%= post._id %>"

    value 오타인듯요 

    #28184

    허다희
    참가자

    오......! 감사합니다!!!

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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