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

home2 게시판 Node.js, Express 게시판 socket.io db 배열 문제

socket.io db 배열 문제

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

    김민주
    참가자
    안녕하세요 socket.io에서 db 저장을 하려고 하는데 오류가 떠서 문의 드립니다.
    
    메시지를 보내면 collection"chatroom"에서 원래 있던 _id에 chat이라는 배열을 추가하고 싶습니다.
    
     server.js 
    
    app.post("/chat", 로그인했니, (req, res) => {
      console.log('req.body.chatroomname=> ' +req.body.chatroomname); //  게시물 작성자
      console.log('req.user.id=> '+req.user.id); // 사용자
      var save = {
        title: req.body.chatroomname,
        member: [ObjectId(req.body.chatroomid), req.user._id],
        date: new Date(),
        
      };
      db.collection("chatroom").find({ member: req.user._id }).toArray().then((result) => { 
        if(req.body.chatroomid){
          db.collection("chatroom").findOne({member : [req.user._id,req.body.chatroomid]},(error,result2)=>{
            if(!result2){  /
              db.collection("chatroom")
              .insertOne(save)
              .then((result3) => {   
            res.render("chat.ejs",{chatlist:result,chatting:result3,name:req.user});
          });
            }
            else{
            res.render("chat.ejs",{chatlist:result,chatting:result2,name:req.user});
            }
          })
        } 
        else{
        res.render("chat.ejs",{chatlist:result,chatting:null,name:req.user});
        }
       });
    }); // 전체 채팅방
    io.on("connection", function (socket) {
      let Username;
      let roomName;
      socket.on("room1-send", function (data) {
        io.emit("broadcast", data);
        console.log("roomName=> "+roomName);
        console.log("보낸사람=>" + Username);
        console.log("메시지=>" + data);
        db.collection("chatroom").find({_id:roomName}).toArray((error,result)=>{
          console.log(result);
          db.collection("chatroom").updateOne({_id:roomName},{ $push: { chat: { UserId:Username , contents: data, date:new Date() } } },
          (result2) => {
            console.log(result2);
            
          })
        })
      });
      socket.on("room1", function (name) {
        Username = name;
        console.log("이름" + name);
        io.to("room1").emit("broadcast", "<p>"+name+"님이 입장하셨습니다. </p>");
      });
      socket.on("joinroom", function (data) {
        roomName = data;
        console.log('방이름'+data);
        socket.join("room1");
      });
    })
    
    이렇게 서버는 작성하였습니다. 그치만 콘솔로 찍어보면 
    방이름641995913c45cc37bddd4a6a 
    이름test1
    roomName=> 641995913c45cc37bddd4a6a 
    보낸사람=>test1
    메시지=>1q
    []
    undefined
    
    이렇게 나옵니다. 왜 오류가 뜰까요?
     
    #73161

    codingapple
    키 마스터
    document 하나 찾고 싶으면 .find .toArray 말고 .findOne() 씁시다
    #73679

    김민주
    참가자
    findOne을 해도 언디파인드가 나옵니다ㅠㅠ 찾는 부분에서 오류가 뜨는 것 같은데 roomName은
    아이디가 잘 나옵니다..왜 chatroom 컬렉션에서 object id를 찾지 못하는 걸까요?
    #73693

    codingapple
    키 마스터
    무슨오류입니까 찾는게 없으면 result변수에 null같은거 뜰걸요
    #73771

    김민주
    참가자
    아하 넵 분명 몽고디비에 같은 값이 있지만, result를 하면 null값이 나옵니다ㅠ
    #73783

    codingapple
    키 마스터
    ObjectId()로 저장된거 찾을 땐 { _id : new ObjectId(document아이디)} 넣읍시다 
    상단에서 ObjectId함수 require해와야할걸요
6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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