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

home2 게시판 Node.js, Express 게시판 [nodemon] app crashed - waiting for file changes before starting...

[nodemon] app crashed - waiting for file changes before starting...

  • 이 주제에는 1개 답변, 2명 참여가 있으며 codingapple2 년 전에 전에 마지막으로 업데이트했습니다.
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #84697

    cion
    참가자
    회원 인증 중간에 검사하는 코드인
    
    app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){ 응답.redirect('/') });
    
    이 코드를 추가하면 오류가 발생합니다. 
    
    
    
    app.post('/login', function(요청, 응답){ 응답.redirect('/') }); 이 코드까지는 문제가 없습니다. 중간에 passport 어쩌고 저쩌고 코드 추가하면
    
    노드몬 앱 크래쉬 충돌이 듭니다. 오류 첨부하겠습니다.
    
    
    
    
    ---오류---
    ReferenceError: Cannot access 'passport' before initialization
        at Object.<anonymous> (C:\Users\legoc\OneDrive\바탕 화면\coding\node.js MongoDB로 빠르게 웹 서비스 만들기\server.js:43:20)
        at Module._compile (node:internal/modules/cjs/loader:1254:14)
        at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
        at Module.load (node:internal/modules/cjs/loader:1117:32)
        at Module._load (node:internal/modules/cjs/loader:958:12)
        at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
        at node:internal/main/run_main_module:23:47
    Node.js v18.16.0
    [nodemon] app crashed - waiting for file changes before starting...
    
    --------
    
    
    
    
    
    
    서버 코드
    
    
    // ↓ express 쓰려면 이거 치고 써야함
    const express = require('express');
    const app = express();
    // body-parser 라이브러리가 express에 기본 포함이라 npm으로 설치할 필요가 없습니다. 
    // ↓ 이 코드만 추가
    app.use(express.urlencoded({ extended: true }))
    // ↓ server.js에서 mongodb 연결하려면 써야하는 코드
    const MongoClient = require('mongodb').MongoClient;
    // ↓ ejs 파일 쓰기위한 코드
    app.set('view engine', 'ejs');
    //html에서 put 요청 하기위한 라이브러리 코드
    const methodOverride = require('method-override')
    app.use(methodOverride('_method'))
    // ↓ 데이터베이스 접속을 위한 전역변수 필요
    var db;
    MongoClient.connect('mongodb+srv://admin:qwer1234@cluster0.zjrrzeq.mongodb.net/?retryWrites=true&w=majority', function (에러, client) {
        if (에러) return console.log(에러);
        //연결되면 할 일
        //몽고DB안에 productlist 라는 데이터베이스 접속하기 코드
        db = client.db('productlist');
        //collection에 자료 하나 추가하는 방법
        // db.collection('post').insertOne({저장할 데이터},콜백함수) - 형식
        //서버 띄우는 코드 여기로 옮기기
        // lisetn(서버띄울 포트번호, 띄운후 실행할 코드)
        app.listen(8080, function () {
            console.log('8080에 접속했습니다.')
        });
    })
    app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){
        응답.redirect('/')
      });
    //누군가 /경로에 방문하면 html 파일을 보내주자.
    app.get('/', function (요청, 응답) {
        응답.render('index.ejs', {});
    })
    app.get('/write', function (요청, 응답) {
        응답.render('write.ejs', {});
    })
    app.get('/list', function (요청, 응답) {
        //데이터 다 찾을때
        db.collection('product').find().toArray(function (에러, 결과) {
            console.log(결과);
            //찾은 결과를 ejs 파일에 넣는다 보낼땐 render
            응답.render('list.ejs', { 제품: 결과 });
        });
    })
    // /:id 는 url 파라미터 (detail/ 뒤로 많은 주소 만들수 있다.
    app.get('/detail/:id', function (요청, 응답) {
        // 요청.params.id 는 get요청 url 뒤에 오는 번호 따온다. 데이터가 숫자형인데 문자열로 변환되어서 전환시킨다.
        db.collection('product').findOne({ _id: parseInt(요청.params.id) }, function (에러, 결과) {
            console.log(결과);
            응답.render('detail.ejs', { data: 결과 });
        })
    })
    app.get('/edit/:id', function (요청, 응답) {
        db.collection('product').findOne({ _id: parseInt(요청.params.id) }, function (에러, 결과) {
            console.log(결과);
            응답.render('edit.ejs', { data: 결과 });
        })
    })
    app.get('/login', function (요청, 응답) {
        응답.render('login.ejs')
    });
    // html 폼에서 입력한 정보는 요청에 들어있음.
    app.post('/add', function (요청, 응답) {
        응답.send('전송완료')
        // ↓ id 부여하기 위해서 만든 코드
        db.collection('count').findOne({ name: '게시물갯수' }, function (에러, 결과) {
            let 총게시물갯수 = 결과.totalproduct
            db.collection('product').insertOne({ _id: 총게시물갯수 + 1, 제품이름: 요청.body.product, 가격: 요청.body.data }, function (에러, 결과) {
                console.log('상품저장완료');
                // ↓ 카운터 컬렉션 안에 id 개수 업데이트를 하기위한 코드 $inc는 연산자 여러가지 있음
                db.collection('count').updateOne({ name: '게시물갯수' }, { $inc: { totalproduct: 1 } }, function () { })
            })
        });
    })
    
    
    //누군가 /경로에 delete 요청을 하면 /function을 실행한다
    app.delete('/delete', function (요청, 응답) {
        // ↓ 데이터를 출력하면 문자열로 나오는데 숫자형을 지워야하기 때문에 숫자 변환 코드
        요청.body._id = parseInt(요청.body._id)
        // ↓ 컬렉션 안에 데이터 삭제하는 코드
        db.collection('product').deleteOne(요청.body, function (에러, 결과) {
            console.log('삭제완료')
        })
    })
    app.put('/edit', function (요청, 응답) {
        //요청.body.name은 ejs파일 인풋 네임에 적힌 정보를 가져올수있다.
        db.collection('product').updateOne({ _id: parseInt(요청.body.id) }, { $set: { 제품이름: 요청.body.product, 가격: 요청.body.data } }, function (에러, 결과) {
            console.log('수정완료')
            응답.redirect('/list')
        })
    })
    //npm install passport passport-local express-session
    //로그인 기능 추가하기 위해 라이브러리 코드
    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());
     
    #84730

    codingapple
    키 마스터
    const passport 부터 6줄을 더 위로 옮깁시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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