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

home2 게시판 Node.js, Express 게시판 채팅방 응용 질문

채팅방 응용 질문

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

    ㅠㅠㅠ
    참가자

    채팅방 구현하는거 까지 해서 했는데 

     <div class="container p-4 detail">

                <div class="row">
                  <div class="col-3">
                    <ul class="list-group chat-list">

                        <% for (var i=0; i < data.length ; i++){ %>
                          <li class="list-group-item" data-id="<%= data[i]._id %>">
                            <h6> <%= data[i].title %> <%= data[i]._id %></h6>    
                            <h6 class="text-small"> <%= data[i].member[0] %> </h6>
                          </li>
                        <% } %>
                      </ul>
                   </div>
             
                   <div class="col-9 p-0">
                     <div class="chat-room">
                        <ul class="list-group chat-content">
                          <li><span class="chat-box">채팅</span></li>
                          <li><span class="chat-box">채팅</span></li>
                          <li><span class="chat-box mine">채팅</span></li>
                        </ul>
                      <div class="input-group">
                        <input class="form-control" id="chat-input">
                        <button class="btn btn-secondary" id="send">전송</button>
                      </div>
                    </div>
                  </div>
                </div>
             
              </div>
           
        </header>
        <main>
            <div class="container">
            </div>
        </main>

        <script>
            $(window).on("load", function(){
                $("header,main").addClass("active");
            });
        </script>

    <script>
      $('#send').click(function(){
        var 채팅내용 = $('#chat-input').val();   //1, 2
        var 보낼거 = {
          parent: 지금누른채팅방id,
          content: 채팅내용,
        };
       
        //3
        $.post('/message', 보낼거).then((a) => {  
           console.log(a)
        });
     
      });

      var 지금누른채팅방id;
      var eventSource;

    $('.list-group-item').click(function (){
       $(this).css('background-color', '#eee');
       지금누른채팅방id = $(this).attr('data-id');
       $('.chat-content').html('');

     
       eventSource = new EventSource('/message/' + 지금누른채팅방id);
      eventSource.addEventListener('test', function (e){
        console.log(e.data);

        var 가져온거 = JSON.parse(e.data);
        가져온거.forEach((a) => {
            $('.chat-content').append(<li><span class="chat-box">${a.content}</span></li>)
        })
      });
    });

    </script>

     

    server.js

     

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

      db.collection('chatroom').find({ member : 요청.user._id }).toArray().then((결과)=>{
        console.log(결과);
        응답.render('chat.ejs', {data : 결과})
      })

    });

    app.post('/chatroom', function(요청, 응답){

      var 저장할거 = {
        title : '1대1 채팅방',
        member : [ObjectId(요청.body.당한사람id),요청.user._id],
        date : new Date()
      }

      db.collection('chatroom').insertOne(저장할거).then(function(결과){
        응답.send('저장완료')
      });
    });
    app.post('/message', 로그인했니, function(요청, 응답){
      var 저장할거 = {
        parent : 요청.body.parent,
        userid : 요청.user._id,
        content : 요청.body.content,
        date : new Date(),
      }
      db.collection('message').insertOne(저장할거)
      .then((결과)=>{
        응답.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);
      });
     

    });

    채팅 보내면 왼쪽으로 다 쏠리는데

    내가 보낸 채팅은 오른쪽으로 보낼려고 하면 어떻게 해야 하나요

    #35059

    codingapple
    키 마스터

    forEach 반복문 돌릴 때 

    a라는 데이터에 들어있는 작성자id가 지금 로그인된 작성자id와 일치하면 

    우측으로 보내라고 코드를 짜면 될듯요 우측으로 보내려면 css 스타일같은거 주면 됩니다 

    #35078

    ㅠㅠㅠ
    참가자

    forEach문 안에 if문 써서 

    하는건 알겠는데 보낸사람의id는 userid이고 내 지금 로그인 된 작성자 id는 어떻게 하죠?

    #35090

    codingapple
    키 마스터

    로그인성공헀을 때 유저id를 서버에서 보내서

    브라우저 localstorage에 저장해두거나 그러면 꺼내쓰기 쉽습니다 

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

About

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

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

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