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

home2 게시판 Node.js, Express 게시판 유저간 채팅기능 만들기 2. 채팅방 숙제

유저간 채팅기능 만들기 2. 채팅방 숙제

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

    서영석
    참가자

     
      app.post('/chatroom',로그인했니,function(요청,응답){

        var 저장할거 = {
          title : '1번장바구니',
          member : [요청.body.당한사람id, 요청.user._id],
          product : [요청.body.prdname,요청.body.prdcount],
          date : new Date()
        }

        db.collection('chatroom').insertOne(저장할거).then((결과)=>{

        })
      })

     

    기존 강의와 다르게 상품 정보를 추가해서 장바구니를 설계를 하려고 합니다.

    const express = require('express');
    const app = express();
    const methodOverride = require('method-override');
    const bodyParser = require('body-parser');
    const MongoClient = require('mongodb').MongoClient;

    app.use(express.urlencoded({ extended: true }));
    app.use(express.json()); // parse json

    app.use('/public', express.static('public'));
    app.use(methodOverride('_method'));

    app.set('view engine', 'ejs');
    app.set('views','./views');

    var db;
    MongoClient.connect('mongodb+srv://scott:scott@cluster0.eeagm.mongodb.net/perfumeapp?retryWrites=true&w=majority', function(에러, client){
        if (에러) return console.log(에러);
        db = client.db('perfumeapp');
        app.listen('8080', function(){
          console.log('listening on 8080')
        });
      })

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

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

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

      app.get('/join', function(요청, 응답){
        응답.render('join.ejs')
      });
      app.get('/list',function(요청,응답){
          db.collection('product').find().toArray(function(에러,결과){
          console.log(결과)
          응답.render('list.ejs',{notes:결과});    
        });
         
      });

      app.post('/register', function (요청, 응답) {
        db.collection('user').insertOne({ id: 요청.body.id, pw1: 요청.body.pw1, pw2: 요청.body.pw2, 이름: 요청.body.name,  성별: 요청.body.gender, 휴대폰번호:요청.body.ph,주소:요청.body.addr}, function (에러, 결과) {
          응답.redirect('/')
        })
      })

      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('/logout',function(요청, 응답){
        요청.logout();
        응답.redirect('/');
      });

      app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청,응답){
        응답.redirect('/sub')
      });

      function 로그인했니(요청,응답,next){
        if(요청.user){
          next()
        } else {
          응답.send('로그인안하셨는데요')
        }
      }

     

      passport.use(new LocalStrategy({
        usernameField: 'id',
        passwordField: 'pw1',
        session: true,
        passReqToCallback: false,
      }, function (입력한아이디, 입력한비번, done) {
        //console.log(입력한아이디, 입력한비번);
        db.collection('user').findOne({ id: 입력한아이디 }, function (에러, 결과) {
          if (에러) return done(에러)
     
          if (!결과) return done(null, false, { message: '존재하지않는 아이디요' })
          if (입력한비번 == 결과.pw1) {
            return done(null, 결과)
          } else {
            return done(null, false, { message: '비번틀렸어요' })
          }
        })
      }));

      passport.serializeUser(function (user, done) {
        done(null, user.id)
      });
     
      passport.deserializeUser(function (아이디, done) {
        db.collection('user').findOne({id : 아이디}, function(에러, 결과){
          done(null, 결과)    
        })    
      });

      app.get('/pen',로그인했니,function(요청,응답){
        응답.render('pen.ejs');
      });

      function 로그인했니(요청,응답,next){
        if(요청.user){
          next()
        } else {
          응답.send('로그인안하셨는데요')
        }
      }
      app.post('/chatroom',로그인했니,function(요청,응답){

        var 저장할거 = {
          title : '1번장바구니',
          member : [요청.body.당한사람id, 요청.user._id],
          product : [요청.body.prdname,요청.body.prdcount],
          date : new Date()
        }

        db.collection('chatroom').insertOne(저장할거).then((결과)=>{

        })
      })
     
      app.get('/chat', 로그인했니, function(요청, 응답){

        db.collection('chatroom').find({ member : 요청.user._id }).toArray().then((결과)=>{
          console.log(결과);
          응답.render('chat.ejs', {data:결과})
        })
     
      });
     
      app.post('/message', 로그인했니, function(요청, 응답){
        var 저장할거 = {
          parent : 요청.body.parent,
          userid : 요청.user._id,
          content : 요청.body.content,
          date : new Date(),
        }
        db.collection('message').insertOne(저장할거).then((결과)=>{
          console.log('DB저장완료')
          응답.send(결과);
        })
      });

      app.get('/message/:parentid', 로그인했니, function(요청, 응답){

        응답.writeHead(200, {
          "Connection": "keep-alive",
          "Content-Type": "text/event-stream",
          "Cache-Control": "no-cache",
        });
     
        db.collection('message').find({ parent: 요청.params.parentid }).toArray()
        .then((결과)=>{
          console.log(결과);
          응답.write('event: test\n');
          응답.write(data: ${JSON.stringify(결과)}\n\n);
        });
     
     
        const 찾을문서 = [
          { $match: { 'fullDocument.parent': 요청.params.parentid } }
        ];
     
        const changeStream = db.collection('message').watch(찾을문서);
        changeStream.on('change', result => {
          console.log(result.fullDocument);
          var 추가된문서 = [result.fullDocument];
          응답.write(data: ${JSON.stringify(추가된문서)}\n\n);
        });
     
      });
     
      app.get('/pen',로그인했니,function(요청,응답){
        응답.render('pen.ejs');
      });

      function 로그인했니(요청,응답,next){
        if(요청.user){
          next()
        } else {
          응답.send('로그인안하셨는데요')
        }
      }

      app.post('/pencil', function(요청, 응답){
     
     
          db.collection('board').insertOne( {작성자: 요청.body.writer, 제목:요청.body.text, 내용:요청.body.subject} , function(에러,결과){
            console.log('저장완료');
              // db.collection('accounter').updateOne({name:'상품갯수'},{$inc :{AllProduct:1}})
              if(에러){return console.log(에러)}
            })
           
          });

          app.get('/blist',function(요청,응답){
            db.collection('board').find().toArray(function(에러,결과){
            console.log(결과)
            응답.render('blist.ejs',{boards:결과});    
          });
           
        });

        app.post('/add',로그인했니, function(요청, 응답){
          응답.send('전송완료');
          db.collection('notecounter').findOne({name : '작성물갯수'}, function(에러, 결과){
            console.log(결과.totalNote)
            var 총작성물갯수 = 결과.totalNote;
       
            db.collection('product').insertOne( { _num: 총작성물갯수 + 1,상품명: 요청.body.prdname, 가격:요청.body.prdprice,향수종류 : 요청.body.pfcategory, 카테고리분류: 요청.body.prdcategory,향구성:요청.body.prdperfume,수량:요청.body.prdcount} , function(에러,결과){
              console.log('저장완료');
             
              db.collection('notecounter').updateOne({name:'작성물갯수'},{ $inc :{totalNote:1}},function(에러,결과){
                // db.collection('accounter').updateOne({name:'상품갯수'},{$inc :{AllProduct:1}})
                if(에러){return console.log(에러)}
              })
             
            });
          });
         
        });

        app.get('/write',로그인했니,function(요청, 응답){
          응답.render('write.ejs')
        });

        let multer = require('multer');
        var storage = multer.diskStorage({

        destination : function(req, file, cb){
        cb(null, './public/image')
        },
          filename : function(req, file, cb){
          cb(null, file.originalname )
        }

        });

        var upload = multer({storage : storage});
       

        app.get('/upload',로그인했니,function(요청,응답){
          응답.render('upload.ejs')
        });

        app.post('/upload', upload.single('프로필'), function(요청, 응답){
          응답.send('업로드완료')
        });
       
       
        app.get('/edit/:id',로그인했니,function(요청,응답){
          db.collection('product').findOne({_id :parseInt(요청.params.id)},function(에러,결과){
            console.log(결과)
          응답.render('edit.ejs', {product : 결과})
        })
      });

      app.put('/edit', function(요청, 결과){
        db.collection('product').updateOne( {_id : parseInt(요청.body.id) }, {$set : { 상품명: 요청.body.prdname, 가격:요청.body.prdprice,향수종류 : 요청.body.pfcategory, 카테고리분류: 요청.body.prdcategory,향구성:요청.body.prdperfume}},
          function(){
         
          console.log('수정완료')
          응답.redirect('/list')
        });
      });

       방향이 잘 가는 것인지 도움을 받고 싶어 글을 올립니다.

     

    #31794

    codingapple
    키 마스터

    의도한바 대로 잘 되면 이상없는 것입니다 

    유저가 데이터를 빈칸을 적어보내면 어떻게할지 숫자말고 문자를 보내면 어떻게할지

    이런 것들도 조건을 넣는게 안전합니다 

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 호 / 개인정보관리자 : 박종흠