-
글쓴이글
-
2021년 9월 11일 03:27 #14922
김병태참가자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')var db;
MongoClient.connect('mongodb+srv://test:test@cluster0.itjb3.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', function(에러, client){
// if (에러) return console.log(에러);
//서버띄우는 코드 여기로 옮기기//연결되면 할 일
if(에러){return console.log(에러)}
db=client.db('todoApp');
// db.collection('post').insertOne({이름:'John', 나이:20,_id:1}, function(에러, 결과){
// console.log('저장완료');
// })app.listen('8080', function(){
console.log('listening on 8080')
});
})//누군가가 /pet으로 방문시 pet관련 안내문을 띄워주자
app.get('/pet', function(요청, 응답) {
응답.send('펫용품 사시오')
})app.get('/beauty', function(요청, 응답) {
응답.send('뷰티용품 사시오')
})app.get('/', function(요청, 응답) {
응답.sendFile(__dirname +'/index.html')
})app.get('/write', function(요청, 응답) {
응답.sendFile(__dirname +'/write.html')
});app.post('/add', function(요청, 응답){
db.collection('counter').findOne({name : '게시물갯수'}, function(에러, 결과){
var 총게시물갯수 = 결과.totalPost;
db.collection('post').insertOne( { _id : (총게시물갯수 + 1), 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
console.log('저장완료')
응답.send('전송완료');
});
});
});// 어떤 사람이 /add 경로로 POST 요청을 하면 ??를 해주세요
// app.post('/add', function(요청, 응답){
// console.log(요청.body);
// 응답.send('전송완료')
// console.log(요청.body.date);
// console.log(요청.body.title);
// });//어떤 사람이 /add라는 경로로 post 요청 보내면 데이터 2개(날짜 제목을 보내주는데 이떄 post라는 이름을 가진 컬렉션에 2개 저장하기)
app.get('/list', function(요청, 응답){
db.collection('post').find().toArray(function(에러, 결과){
console.log(결과)
응답.render('list.ejs',{posts:결과});
})
})// app.post('/add', function(요청, 응답){
// 응답.send('전송완료');
// // db.collection('post').insertOne( { _id : 2, 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
// db.collection('post').insertOne( { 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
// console.log('저장완료')
// });
// });//list get요청으로 접속시 실제 디비에 저장된 데이터들로 이쁘게 꾸며진 HTML 보여줌
// app.get('/list', function(요청, 응답){
// 응답.render('list.ejs');
// db.collection('post').insertOne( { 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
// console.log('저장완료')
// });
// });// app.post('/add', function(요청, 응답){ //add로 post 요청시
// 응답.send('전송완료'); //DB.counter 내의 총 게시물갯수를 찾음
// 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에 새 게시물 기록함
// //counter라는컬렉션에 있는 totalPost라는 항목도 1 증가시켜야함
// db.collection('counter').updateOne( {name : '게시물갯수' } , { $inc : { totalPost : 1 } } , function(에러, 결과){
// // console.log('수정완료')
// if(에러){return console.log(에러)} //완료되면 DB.counter 내의 총 게시물
// })
// });// });
// });<hr />
<!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">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<title>Document</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button><div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav"><li class="nav-item active">
<a class="nav-link" href="#">할일 <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Features</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">임시</a>
</li>
</ul>
</div>
</nav><h4 class="container mt-4"><strong>글 작성페이지</strong></h4>
<div class="container mt-3">
<form action="/add" method="POST">
<div class="form-group">
<label>오늘의 할일</label>
<input type="text" class="form-control" name="title">
</div>
<div class="form-group">
<label>날짜</label>
<input type="text" class="form-control" name="date">
</div>
<button type="submit" class="btn btn-outline-secondary">Submit</button>
</form>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</body>
</html><hr />
제가 빡통이라 그런지 도저히 코드 봐도 모르겠습니다.
Desktop\apple\Nodejs\todoapp\server.js:56
var 총게시물갯수 = 결과.totalPost;
^TypeError: Cannot read property 'totalPost' of null
이런 에러가 뜨는지 3시간 가까이 강의 돌려보고 구글링해도 도저히 모르겠습니다. 알려주시면 감사하겠습니다.
2021년 9월 11일 09:56 #14925
codingapple키 마스터totalPost 왼쪽에 있는 결과가 null이라는 에러군요 DB에 있던 게시물을 못찾으면 그렇습니다
DB에는 name : 게시글갯수" 라고 저장해놓으셔서 이걸 찾고 싶으면
db.collection('counter').findOne({name : '게시글갯수"'}
이렇게 써야할듯요?
-
글쓴이글
- 답변은 로그인 후 가능합니다.