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

home2 게시판 Node.js, Express 게시판 MODULE_NOT_FOUND

MODULE_NOT_FOUND

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

    현정
    참가자

     

    건드린게 없는데 index랑 write.html render한뒤부터 계속 모듈을 찾을수 없다고 떠요 왜그런가요?ㅠㅠ 

    (package.json)

    {
      "name": "todoapp",
      "version": "1.0.0",
      "description": "",
      "main": "server.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "body-parser": "^1.19.2",
        "ejs": "^3.1.6",
        "express": "^4.17.3",
        "mongodb": "^4.4.0",
        "nodemon": "^2.0.15"
      }
    }

    (server.js)

    const express = require('express')
    const app = express()
    const bodyParser = require('body-parser')
    const { Db } = require('mongodb')
    // const { Db } = require('mongodb')
    app.use(bodyParser.urlencoded({extended: true}))
    const MongoClient = require('mongodb').MongoClient
    app.set('view engine', 'ejs')
    app.engine('html', require('ejs').renderFile);
    // public 폴더 쓸거다~
    app.use('/public', express.static('public'))
    // 폼에서 만든 데이터를 db에 저장해보자!
    // 1.서버로 데이터 전송할수있는 UI 만들기
    // 2.서버에서 원하는대로 정보를 처리해주면됨
    // MongoDB DB로 무료호스팅을 하자!
    var db;
    MongoClient.connect('mongodb+srv://p42510:1234@cluster0.qx0kj.mongodb.net/TODOAPP?retryWrites=true&w=majority', { useUnifiedTopology: true },function(에러, clinet){
        // 연결되면 할일(에러처리 mongdb관련 함수들 전부 콜백함수에서 에러처리 가능)
        if (에러) return console.log(에러)
       
        db = clinet.db('TODOAPP')
        // todoapp 이라는 db에 연결좀요

        // db.collection('post').insertOne( {이름: 'John', 나이: 20, _id :100},function(에러, 결과){
        //     console.log('저장완료')
        // })
        // 이름과 나이를 db에 저장해보자
        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')
    })

    // 어떤 사람이 /add 경로로 POST 요청을 하면

    app.post('/add', function(요청, 응답){
        console.log(요청.body.date)
        console.log(요청.body.title)
        db.collection('counter').findOne( { name: '게시물갯수'}, function(에러, 결과){
            console.log(결과.totalPost)
            var 총게시물갯수 = 결과.totalPost
            // db.counter에서 총게시물갯수를 찾고 변수로 저장

            // 이제 db.post에 새게시물을 기록한뒤 완료되면 db.counter내의 총게시물갯수+1
            db.collection('post').insertOne( {_id : 총게시물갯수 + 1, 제목:요청.body.title, 날짜:요청.body.date}, function(에러, 결과){
                응답.send('전송완료')
                console.log('저장완료')
                // count라는 콜렉션에 있는 totalPost라는 항목도 1 증가시켜야함(수정)
                db.collection('counter').updateOne( { name:'게시물갯수'},{ $inc : {totalPost:1}}, function(에러, 결과){
                    if(에러) {return console.log(에러)}
                })
            })
        })
    })

    // /list 로 GET요청으로 접속하면
    // 실제 DB에 저장된 데이터들로 예쁘게 꾸며진 HTML을 보여줌
    app.get('/list', function(요청, 응답){
        // post 라는 collection안의 모든 db 데이터를 꺼내보자
        db.collection('post').find().toArray(function(에러,결과){
            console.log(결과)
            응답.render('list.ejs', {posts: 결과 })
            // 꺼낸 데이터 ejs파일에 집어넣깅 { 이런이름으로 : 이런데이터를}
        })
    })

    // 게시물 삭제버튼 누를때만 삭제하는 방법
    app.delete('/delete', function(요청, 응답){
        console.log(요청.body)
        요청.body._id = parseInt(요청.body._id);
        // 요청.body에 담긴 게시물 번호에따라 db에서 게시물삭제
        db.collection('post').deleteOne(요청.body, function(에러, 결과){
            console.log('삭제완료')
            응답.status(200).send({ messeage: '성공했습니다'})
        })
        응답.send('삭제완료')
    })

    // detail[i]로 접속하면 detail[i].ejs 보여줌
    app.get('/detail/:id', function(요청, 응답){
        db.collection('post').findOne({_id : parseInt(요청.params.id)}, function(에러, 결과){
            console.log(결과)
            응답.render('detail.ejs', { data : 결과})
        })
    })

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

    app.get('/write', function(요청, 응답){
        응답.sendFile(__dirname + '/write.html')
    })얘랑 render 문 같이 쓰는게 관련이있나요?

    #28593

    현정
    참가자

    해결방법 찾았습니다

    npm install server.js 터미널창에 입력하면 다시 되던데 왜그런걸까여

    #28611

    codingapple
    키 마스터

    require('mongodb') 3개 있는거같은데 2개는 지웁시다 

    nodejs 17버전 버그같은걸 수도 있습니다 16버전을 쓰도록 합시다 

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

About

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

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

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