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

home2 게시판 Node.js, Express 게시판 채팅 메세지 보내기가 안됩니다.

채팅 메세지 보내기가 안됩니다.

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

    코딩마스터
    참가자
    (list.ejs)
    <!doctype html>
    <html lang="en">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
            integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
        <title>Hello, world!</title>
    </head>
    <body>
        <%- include('nav.html') %>
            <h4 class="ml-4 my-3 text-center">서버에서 가져온 할일 리스트</h4>
            <div class="container input-group mb-2">
                <input class="form-control" id="search_input">
                <button class="input-group-append btn btn-danger" id="search">검색</button>
            </div>
            <div class="container">
                <ul class="list-group">
                    <% for(let i=0; i< posts.length; i++){ %>
                        <li class="list-group-item">
                            <h5>글번호: <%= posts[i]._id %>
                            </h5>
                            <h5 class="todo">할일: <%= posts[i].title %>
                            </h5>
                            <p>마감일 : <%= posts[i].date %>
                            </p>
                            <p>작성자 : <%= posts[i].author %>
                                    <button class="chat btn btn-secondary" data-id=" <%= posts[i].author %>">채팅하기</button>
                            </p>
                            <button class="delete btn btn-danger" data-id=" <%= posts[i]._id %>">삭제</button>
                            <button class="edit btn btn-primary" data-id=" <%= posts[i]._id %>">수정</button>
                       

                        <% } %>            

            </div>

            <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
            <script>
                $('#search').click(function () {
                    var enteredValue = $('#search_input').val();
                    window.location.replace('/search?value=' + enteredValue);
                });
            </script>
            <script>
                $('.delete').click(function (e) {
                    var listNum = e.target.dataset.id;
                    var currentTarget = $(this);
                    $.ajax({
                        method: 'DELETE',
                        url: "/delete",
                        data: { _id: listNum },
                    }).done((result) => {
                        console.log('성공');
                        currentTarget.parent('li').fadeOut();
                    }).fail((xhr, textStatus, errorThrown) => {
                        console.log(xhr, textStatus, errorThrown);
                    });
                })
            </script>
            <script>
                $('.edit').click(function (e) {
                    var listNum = e.target.dataset.id;
                    console.log(listNum);
                    $.ajax({
                        method: 'GET',
                        url: "/edit/" + listNum,
                        data: { _id: listNum },
                    }).done((result) => {
                        console.log('성공');
                        window.location.replace("/edit/" + listNum);
                    }).fail((xhr, textStatus, errorThrown) => {
                        console.log(xhr, textStatus, errorThrown);
                    });
                })
            </script>
            <script>
                $('.chat').click(function (e) {
                    var id = e.target.dataset.id;
                    console.log(id); //kim
                    console.log(typeof id); //string
                    $.post('/chatroom', { chatPartner: id })
                        .then(() => {
                            console.log('채팅방 게시물 생성완료');
                        })
                })
            </script>
            <!-- Optional JavaScript; choose one of the two! -->
            <!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
            <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
                integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
                crossorigin="anonymous"></script>
            <!-- Option 2: Separate Popper and Bootstrap JS -->
            <!--
        
        <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script>
        -->
    </body>
    </html>
    
    
     
    (server.js)
     
    const { ObjectID } = require('mongodb');
    app.post('/chatroom', function (req, res) {
        console.log(req.body.chatPartner); // kim
        console.log(typeof req.body.chatPartner); // string
        console.log(req.user._id); // 6470234cd18eee48e0238077
        console.log(typeof req.user._id); // object
        var chatPartnerId = new ObjectID(req.body.chatPartner); // Convert chatPartner to ObjectID
        var currentUserID = new ObjectID(req.user._id); // Convert req.user._id to ObjectID
        var thingsToSave = {
            title: '무슨무슨채팅방',
            member: [chatPartnerId, currentUserID],
            date: new Date()
        };
        db.collection('chatroom').insertOne(thingsToSave).then(function (result) {
            res.send('저장완료');
        }).catch(function (error) {
            console.error(error);
            res.status(500).send('Internal Server Error');
        });
    });
     
    강의 똑같이 따라했는데도
    채팅하기 눌렀을 때 이런 에러가 뜨길래
    Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
    몽고디비 버전이 "mongodb": "^3.6.4" 라서 버전이 달라서 오는 문제인 것 같아서
    chat gpt 에 물어보니까
    
    ObjectId 를 ObjectID 로 바꿔야 한다그래서 위 처럼 수정했는데
    여전히 같은 에러 뜨면서
    chatroom collection에 document가 추가 되지 않습니다.
     
    
    
    몇시간째 계속 헤매고 있는데 뭐가 잘못된 걸까요ㅠㅠ
    #84681

    codingapple
    키 마스터
    objectid 길이가 이상하다는데 data-id=" <%= posts[i].author %>" 에 공백 제거해봅시다
    #84691

    코딩마스터
    참가자
    <button class="chat btn btn-secondary" data-id="<%=posts[i].author%>">채팅하기</button>
    공백제거 했는데도 똑같이 안되네요 ㅠㅠ
    Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
    같은 에러 발생됩니다
     
     
     
     
     
    #84729

    codingapple
    키 마스터
    req.body.chatPartner는 유저 아이디라서 objectid 형식이 아닌거같은데 ObjectID() 안에 넣지맙시다
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 호 / 개인정보관리자 : 박종흠