7 글 보임 - 1 에서 7 까지 (총 7 중에서)
-
글쓴이글
-
2022년 6월 30일 22:42 #37775
유정현참가자MongoError: BSON field 'delete.deletes.q' is the wrong type 'int', expected type 'object' at Connection.<anonymous> (C:\nodestudy\TODOAPP\views\node_modules\mongodb\lib\core\connection\pool.js:451:61) at Connection.emit (node:events:537:28) at processMessage (C:\nodestudy\TODOAPP\views\node_modules\mongodb\lib\core\connection\connection.js:451:10) at TLSSocket.<anonymous> (C:\nodestudy\TODOAPP\views\node_modules\mongodb\lib\core\connection\connection.js:620:15) at TLSSocket.emit (node:events:537:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Readable.push (node:internal/streams/readable:234:10) at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23) { ok: 0, code: 14, codeName: 'TypeMismatch', '$clusterTime': { clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1656596363 }, signature: { hash: [Binary], keyId: [Long] } }, operationTime: Timestamp { _bsontype: 'Timestamp', low_: 2, high_: 1656596360 } } [ { _id: 1, '제목': '이러한이유', '날짜': 'Thu Jun 30 2022 22:19:19 GMT+0900 (한국 표준시)', '내용': '저러한이유' } ] DELETE할 경우 이러한 오류가 나옵니다. 아무리 찾아봐도 방법을 모르겠습니다 ㅠㅠ 알려주시면 감사하겠습니다.
2022년 6월 30일 22:42 #37776
유정현참가자const express = require('express'); const app = express(); const bodyParser = require('body-parser'); app.use(express.urlencoded({ extended: true }));
const MongoClient = require('mongodb').MongoClient app.set('view engine', 'ejs'); app.engine('ejs', require('ejs').__express); app.use('/public', express.static('public')) const methodOverride = require('method-override') app.use(methodOverride('_method')) require('dotenv').config()
MongoClient.connect(process.env.DB_URL, function(에러, client){ if(에러) return console.log(에러)
db = client.db('todoapp');
app.listen(process.env.PORT, function() { console.log('listening on 8080') });
});
app.get('/write', function(요청, 응답){ 응답.render('write.ejs', { }); }); app.get('/',function(요청, 응답){ 응답.render('index.ejs', { }); });
app.post('/add', function (요청, 응답) { db.collection('counter').findOne({name : '게시물개수'}, function(에러, 결과){ var 총게시물개수 = 결과.totalPost db.collection('post').insertOne({ _id : 총게시물개수 + 1, 제목 : 요청.body.title,날짜: new Date(), 내용 : 요청.body.textBlank }, function (에러, 결과) { db.collection('counter').updateOne({name:'게시물개수'},{ $inc: {totalPost:1} },function(에러, 결과){ if(에러){return console.log(에러)} 응답.send('전송완료'); }) }) }) })
app.get('/list', function(요청, 응답){ db.collection('post').find().toArray(function(에러, 결과){ console.log(결과) 응답.render('list.ejs', { posts : 결과 }) }) })
app.delete('/delete', function(요청, 응답){ 요청.body._id = parseInt(요청.body._id) db.collection('post').deleteOne(요청.body._id, function(에러, 결과){ console.log('삭제완료') console.log(요청.body._id) console.log(에러) 응답.status(200).send({ message : '성공했습니다.'}); }) });
app.get('/detail/:id', function(요청, 응답){ db.collection('post').findOne({_id : parseInt(요청.params.id)}, function(에러, 결과){ console.log(결과); console.log(에러); 응답.render('detail.ejs', { data : 결과 }); }) })
app.get('/edit/:id', function(요청, 응답){ db.collection('post').findOne({_id : parseInt(요청.params.id)}, function(에러, 결과){ console.log(결과); console.log(에러); 응답.render('edit.ejs', {post : 결과}) }) }) app.put('/edit', function(요청, 응답){ db.collection('post').updateOne({_id : parseInt(요청.body.id) },{$set : {제목: 요청.body.title, 날짜: new Date(), 내용: 요청.body.textBlank}},function(에러, 결과){ console.log('수정완료') console.log(에러) 응답.redirect('/list') }) }) const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const session = require('express-session');
app.use(session({secret : '비밀코드', resave : true, saveUninitialized: false})); app.use(passport.initialize()); app.use(passport.session()); app.get('/login', function(요청, 응답){ 응답.render('login.ejs') //로그인 페이지를 읽으면 login페이지를 보여줘라 }); 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("<script>alert('로그인해주세요.'); window.location.replace('/login');</script>") } }
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, 결과) }) });
//요청은 모든 데이터를 꺼냄 그중 query를 꺼내고 사용자가 입력한 value를 최종적으로 꺼냄 app.get('/search', (요청, 응답)=>{ console.log(요청.query); db.collection('post').find({제목 : 요청.query.value}).toArray((에러, 결과)=>{ console.log(결과) 응답.render('search.ejs', { posts : 결과 }) }) })
SERVER.JS 전체코드입니다.
2022년 6월 30일 22:43 #37777
유정현참가자<!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"> <link rel="stylesheet" href="/public/main.css"> <title>Hello, world!</title> </head> <body> <%- include('nav.html') %> <div class="container input-group mb-2"> <input class="form-control" id="search-input"> <button class="input-group-append btn btn-danger" id="search">검색</button> </div> <div class="container"> <h1>할일 리스트 </h1> <h2>글개수: <%=posts.length%></h2> <ul class="list-group"> <% for (var i = 0; i < posts.length; i++){ %> <li class="list-group-item"> "> <p> 작성일 : <%= posts[i].날짜 %> </p> <h4> 제목: <%= posts[i].제목 %> </h4> <p> 수리접수내용 : <%= posts[i].내용 %> </p> <button class="delete" data-id="<%= posts[i]._id %>">삭제</button> <% } %> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.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('성공했습니다.') //AJAX 성공시 실행할 코드는 여기 지금누른거.parent('li').fadeOut(); //지금누른거 부모중에 li가 있으면 사라지게해줘라
}).fail(function(a,b,c){ console.log(a,b,c)
//xhr, textStatus,errorThrown 실패 파라미터 }) }); $('#search').click(function(){ var 입력한값 = $('#search-input').val(); window.location.replace('/search?value=' + 입력한값) });
</script> <!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
<!-- Option 2: Separate Popper and Bootstrap JS --> <!-- <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> list.ejs파일입니다.
2022년 7월 1일 09:48 #37797
codingapple키 마스터deleteOne 안에는 삭제할 document의 일부 정보를 넣으면 됩니다
{ _id : 1, 글제목 : abc }
이런 document를 삭제하고 싶으면 deleteOne({_id : 1}, function(){ }) 이렇게 코드를 짜야 삭제됩니다
2022년 7월 3일 13:40 #37899
유정현참가자app.delete('/delete', function(요청, 응답){ 게시물삭제아이디 = parseInt(요청.body._id) db.collection('post').deleteOne(게시물삭제아이디, function(에러, 결과){ console.log('삭제완료') console.log(게시물삭제아이디) console.log(에러) 응답.status(200).send({ message : '성공했습니다.'}); }) }); ---------------------------------------------------------------------------- MongoError: BSON field 'delete.deletes.q' is the wrong type 'int', expected type 'object' at Connection.<anonymous> (C:\nodestudy\TODOAPP\views\node_modules\mongodb\lib\core\connection\pool.js:451:61) at Connection.emit (node:events:537:28) at processMessage (C:\nodestudy\TODOAPP\views\node_modules\mongodb\lib\core\connection\connection.js:451:10) at TLSSocket.<anonymous> (C:\nodestudy\TODOAPP\views\node_modules\mongodb\lib\core\connection\connection.js:620:15) at TLSSocket.emit (node:events:537:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Readable.push (node:internal/streams/readable:234:10) at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23) { ok: 0, code: 14, codeName: 'TypeMismatch', '$clusterTime': { clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1656823087 }, signature: { hash: [Binary], keyId: [Long] } }, operationTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1656823087 } } deleteOne에 게시물 삭제아이디를 넣었는데도 아래처럼 오류가 나옵니다. int 타입이 잘못되었다고 나오는데 어떻게 해야하나요ㅕ??
-
글쓴이글
7 글 보임 - 1 에서 7 까지 (총 7 중에서)
- 답변은 로그인 후 가능합니다.