2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 6월 19일 10:26 #87510
리아참가자.env 파일 만들고 나서부터 갑자기 에러가 떠서 다시 원상복구했는데 뭘 잘못 건드려서 여기저기 바꾸다보니 이렇게 됐어요 ㅠ 현재 글번호가 object id 로 뜨고 delete 가 안되는 등의 에러가 있습니다 검색기능만들기 1 직전에 코드를 볼 수 있을까요? 아니면 문제가 보이시나요? 제가 하도 여기저기 바꿔서요 ㅠ server.js
const express = require('express'); const app = express(); const bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: true })); const MongoClient = require('mongodb').MongoClient; const methodOverride = require('method-override') require('dotenv').config()
app.use(methodOverride('_method'))
app.set('view engine', 'ejs');
var db; MongoClient.connect("mongodb+srv://adminChung:******@cluster0.g8ddnxu.mongodb.net/?retryWrites=true&w=majority", function(err, client){ if (err) { console.log(err); return; }
db = client.db('TodoApp'); app.listen(8080, function() { console.log('listening on 8080'); }); });
app.use('/public', express.static('public'))
app.get('/pet', function(req, res) { res.send('petshop'); });
app.get('/beauty', function(req, res) { res.send('this is the best beauty store.'); });
app.get('/', function(req, res) { res.render('index.ejs'); });
app.get('/home', function(req, res) { res.render('index.ejs'); });
app.get('/write', function(req, res) { res.render('write.ejs'); });
app.post('/add', function (요청, 응답) { db.collection('counter').findOne({name : '게시물갯수'}, function(에러, 결과){ var 총게시물갯수 = 결과.totalPost
db.collection('post').insertOne({ _id : 총게시물갯수 + 1, 제목 : 요청.body.제목, 날짜 : 요청.body.날짜 }, function (에러, 결과) { db.collection('counter').updateOne({name:'게시물갯수'},{ $inc: {totalPost:1} },function(에러, 결과){ if(에러){return console.log(에러)} 응답.send('전송완료'); }) })
}) })
app.get('/list', function(req,res){ db.collection('post').find().toArray(function(error,result){
console.log(result); res.render('list.ejs',{posts: result}); });
});
app.delete('/delete', function(req, res) { var postId = parseInt(req.body._id); db.collection('post').deleteOne({ _id: postId }, function(error, result) { if (error) { console.log('MongoDB error:', error); return; } console.log('삭제완료'); res.send('삭제완료'); }); });
app.get('/detail/:id', function(요청, 응답){ db.collection('post').findOne({ _id : parseInt(요청.params.id) }, function(에러, 결과){ if (에러) { console.log(에러); res.send('Error occurred'); return; } 응답.render('detail.ejs', {data : 결과} ); }); });
app.get('/edit/:id',function(req,res){ db.collection('post').findOne({_id : parseInt(req.params.id)}, function(error,result){ res.render('edit.ejs', {post : result}) console.log(result) }) })
app.put('/edit', function(req,res){ // submit 누르면 새로운 데이터를 업데이트 db.collection('post').updateOne({_id : parseInt(req.body.id)},{$set : { 제목 : req.body.제목, 날짜 : req.body.날짜}},function(error,result){ console.log('수정완료') res.redirect('/list')
})
});
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const session = require('express-session');
app.use(session({secret : 'secret', resave : true, saveUninitialized: false})); app.use(passport.initialize()); app.use(passport.session()); //app.use : 미들웨어. 요청-응답 중간에 뭔가 실행
app.get('/login', function(req,res){ res.render('login.ejs') });
app.post('/login', passport.authenticate('local', { failureRedirect : '/fail' }), function(req,res){ res.redirect('/') });
app.get('/mypage', didLogin, function(req,res){
console.log(req.user); //아이디 비번 프린트 res.render('mypage.ejs', {사용자 : req.user})
});
function didLogin(req,res,next){ if(req.user){ next(); } else{ res.send('Log in first.') } }
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(id,done){ //디비에서 user.id 로 유저를 찾고 유저 정보를 밑에 {}에 넣음 db.collection('login').findOne({id : id}, function(error,result){ done(null,result) }) }); list.ejs
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title>
<!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<!-- CSS styles for the navbar --> <style> .navbar { background-color: #f1f1f1; padding: 10px; } .navbar ul { list-style-type: none; margin: 0; padding: 0; overflow: hidden; } .navbar li { float: left; } .navbar li a { display: block; color: black; text-align: center; padding: 14px 16px; text-decoration: none; } .navbar li a:hover { background-color: #ddd; } </style> </head>
<body> <h4> 서버에서 가져온 할일 리스트 </h4>
<div class="container input-group mb-2"> <input class="form-control"> <button class="input-group-append btn btn-danger">검색</button> </div>
<div class="container mt-3"> <ul class="list-group"> <% for (var i = 0; i < posts.length; i++){ %> <li class="list-group-item"> <p>글번호: <%= posts[i]._id %></p> <h4 class="detail" data-id="<%= posts[i]._id %>">할일 제목: <%= posts[i].제목 %></h4> <p>할일 마감날짜: <%= posts[i].날짜%></p> <button class="delete" data-id="<%= posts[i]._id %>">삭제</button> <% } %>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <!-- Bootstrap JavaScript --> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@1.16.1/dist/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script>
$('.delete').click(function(e){ var 글번호 = e.target.dataset.id; $.ajax({ method : 'DELETE', url : '/delete?id='+ 글번호,
}).done(function(result){ //AJAX 성공시 실행할 코드는 여기 console.log(result);
}).fail(function(error){ console.log(error); });
});
$('.detail').click(function(e){ var taskID = e.target.dataset.id; $.ajax({ method : 'GET', url : '/detail/' + taskID, }).done(function(result){ //AJAX 성공시 실행할 코드는 여기 console.log(result);
}).fail(function(error){ console.log(error); });
}); </script>
</body> </html>
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.