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

home2 게시판 Node.js, Express 게시판 서버 안열림

서버 안열림

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

    홍상은
    참가자
    const express = require('express');
    const app = express();
    app.use(express.urlencoded({extended: true})) //express
    const MongoClient = require('mongodb').MongoClient;
    const methodOverride = require('method-override')
    app.use(methodOverride('_method'))
    require('dotenv').config()
    var db; //변수 하나 필요
      MongoClient.connect(process.env.DB_URL, function(에러, client){
        //연결되면 할일
      if (에러) return console.log(에러)
      db = client.db('recommand_site'); //todoapp이라는 database(폴더)에 연결
      app.listen(process.env.PORT, function() {//listen(파라미터1(서버띄울 포트번호),파라미터2(띄운 후 실행할 코드))
        console.log('listening on 8080')//3000포트에 서버 띄어 주세요
      })
    })
    app.get('/', function(요청, 응답){
        응답.sendFile(__dirname + '/views/index.html')//현재파일의 경로
    });
    ///list 로 GET요청으로 접속하면
    //실제 DB에 저장된 데이터들로 예쁘게 꾸며진 HTML을 보여줌
    app.get('/book', function(요청, 응답){
        db.collection('book').find().toArray(function(에러, 결과){
            //console.log(결과);//DB에서 자료 찾아주세요
            응답.render('Book.ejs', { posts : 결과});//찾은걸 ejs파일에 집어넣어주세요
        });
        //디비에 저장된 post라는 clooection안의 모든 데이터를 꺼내주세요
    });
    app.get('/movie', function(요청, 응답){
      db.collection('movie').find().toArray(function(에러, 결과){
          //console.log(결과);//DB에서 자료 찾아주세요
          응답.render('Movie.ejs', { posts : 결과});//찾은걸 ejs파일에 집어넣어주세요
      });
      //디비에 저장된 post라는 clooection안의 모든 데이터를 꺼내주세요
    });
    app.get('/music', function(요청, 응답){
      db.collection('music').find().toArray(function(에러, 결과){
          //console.log(결과);//DB에서 자료 찾아주세요
          응답.render('Music.ejs', { posts : 결과});//찾은걸 ejs파일에 집어넣어주세요
      });
      //디비에 저장된 post라는 clooection안의 모든 데이터를 꺼내주세요
    });
    app.get('/search', (요청, 응답) => {
        var 검색조건 = [
            {
              $search: {
                index: 'titleSearch1',
                text: {
                  query: 요청.query.value,
                  path: '제목'  // 제목날짜 둘다 찾고 싶으면 ['제목', '날짜']
                }
              }
            },
          ] 
        db.collection('post').aggregate(검색조건).toArray((에러, 결과)=>{
            console.log(결과)
            응답.render('search.ejs', {posts : 결과});//ejs에 결과 보내기
        })
    })
    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')
    });
    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('로그인 안하셨는데요?')
        }
    }
    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: '존재하지않는 아이디요' })//DB에 아이디가 없으면
          if (입력한비번 == 결과.pw) {//DB에 아이디가 있으면 입력한 비번과 결과.pw비교
            return done(null, 결과)//done(서버에러, 성공시 사용자 DB데이터, 에러메시지)
          } else {
            return done(null, false, { message: '비번틀렸어요' })
          }
        })
      }));
      //id를 이용해서 세션을 저장시키는 코드(로그인 성공시 발동)
      passport.serializeUser(function(user, done){
        done(null, user.id)
      });
      
      //이 세션 데이터를 가진 사람을 DB에서 찾아주세요(마이페이지 접속시 발동)
      passport.deserializeUser(function(아이디, done){
        db.collection('login').findOne({id : 아이디}, function(에러, 결과){
            done(null, 결과)
        })
        
    });
    //회원기능이 필요하면 passport요청하는부분이 위에 있어야함
    //</회원가입>
    //저장전에 id가 이미 있는지 먼저 찾아 봐야함
    //id에 알파벳 숫자만 잘 들어 있는지
    //비번 저장전에 암호화 했는지
    app.post('/register', function(요청, 응답){
      db.collection('login').insertOne( { id : 요청.body.id, pw : 요청.body.pw }, function(에러, 결과){
        응답.redirect('/')
        
      })
    })
    app.post('/add', function (요청, 응답){//누가 폼에서 /add로 POST 요청하면
      응답.send('전송완료');
      db.collection('counter').findOne({name: '게시물갯수'}, function(에러, 결과){//DB.counter 내의 총게시물갯수를 찾음
          console.log(결과.totalPost)//총 게시물 갯수
          var 총게시물갯수 = 결과.totalPost;//let,const//총게시물갯수를 변수에 저장
          var 저장할것 = {_id : 총게시물갯수 + 1, 작성자 : 요청.user._id, 제목: 요청.body.title, 날짜: 요청.body.date, };
      
          db.collection('post').insertOne(저장할것, function(에러, 결과){//DB.post에 새게시물 기록함
              console.log('저장완료');
              //counter라는 콜렉션에 있는 totalPost 라는 항목도 1 증가시켜야함(수정);
              db.collection('counter').updateOne({name: '게시물갯수'},{ $inc : {totalPost:1}}, function(){//완료되면 DB.counter 내의 총 게시물갯수 +1
                  if(에러){return console.log(에러)}
              })//데이터 수정시 operator를 써야함
          });//데이터 저장
      });
    });
    app.delete('/delete', function(요청, 응답){
      console.log(요청.body);
      요청.body._id = parseInt(요청.body._id);
      var 삭제할데이터 = { _id : 요청.body._id, 작성자 : 요청.user.id }
      //요청.body에 담겨온 게시물번호를 가진 글을 db에서 찾아서 삭제해주세요
      db.collection('post').deleteOne(삭제할데이터, function(에러, 결과){
          console.log('삭제완료');
          if (결과) {console.log(결과)}
          응답.status(200).send({ message  : '성공했습니다' });//응답코드 200을 보내주세요
      })
    })
    이렇게 서버파일을 수정했고 실행을 시키면 
    [nodemon] 3.0.1
    [nodemon] to restart at any time, enter `rs`
    [nodemon] watching path(s): *.*
    [nodemon] watching extensions: js,mjs,cjs,json
    [nodemon] starting `node server.js`
    이렇게 뜨고 오류는 없는데 listening on 8080이 안뜹니다ㅠㅠ
    #96186

    codingapple
    키 마스터
    db연결 url이 잘못되거나 .env 파일이 없는게 아닐까요
    #96216

    홍상은
    참가자
    서버포트 코드만 해보니까 서버가 열려서 db문제인거 같습니다
    제가 cluster0에 데이터베이스를 두개 만들었는데 그거 때문일까요?스크린샷 2023-08-29 133233
    .env코드는
    PORT=3000
    DB_URL="mongodb+srv://admin:qwer1234@cluster0.lprzs8w.mongodb.net/?retryWrites=true&w=majority"
    이렇습니다
     
    #96228

    codingapple
    키 마스터
    .mongodb.net/ 뒤에 todoapp 데이터베이스명 추가해봅시다
    #96240

    홍상은
    참가자
    PORT=3000
    DB_URL="mongodb+srv://admin:qwer1234@cluster0.lprzs8w.mongodb.net/recommand_site?retryWrites=true&w=majority"
    이렇게 해봤는데 안됩니다..
    #96267

    codingapple
    키 마스터
    npm install mongodb@3.6.4 로 설치합시다
    #96274

    홍상은
    참가자
    이제 해결됐습니다 감사합니다!ㅠ
7 글 보임 - 1 에서 7 까지 (총 7 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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