본문 바로가기
Server/Node.js

채팅 기능 만들어보기 (혼자 만들어본 버전)

by print_soo 2023. 9. 13.

[순서도]

 

 

// 채팅 버튼 클릭 시 작동
app.post('/createchat', function(request, response){

    db.collection('chatroom').findOne({ title: request.body.title }, function (error, result) {
        if (error) return error   

        if (!result) {
            console.log('채팅방찾음x');
            request.body.member.push(request.user._id.toString()); //채팅에 참여한 멤버로 현 로그인한 사용자를 넣었음.
            db.collection('chatroom').insertOne(request.body, function (error, result) {
                if (!result) {
                } else {
                    response.status(200).send({ message: '채팅방이 존재합니다.' })
                }
            });
        }
        else {
            console.log('채팅방찾음');
            response.status(200).send({ message: '채팅방이 존재합니다.' })
        }
    })
});

var chatData;

//채팅방에 진입 시 작동
app.get('/chatroom', function(request, response){
    db.collection('chatroom').find().toArray(function(error, result){ //채팅방 목록 가져오기
        chatData = result;
        db.collection('chatcontent').find( {roomnumber: request.query.chatroomnumber}).toArray (function (error, result) {
            response.render('chat.ejs', {chatContentData : result, chatData : chatData, userInfo : request.user})
        })
    }); 

})


// 채팅방에서 전송 버튼 클릭시 작동
app.get('/chat', function(request, response){
    var sendContent = {writer: request.user._id, content: request.query.chatContent, roomnumber: request.query.chatRoom}

    db.collection('chatcontent').insertOne( sendContent ,function (error, result) {
        db.collection('chatcontent').find( {roomnumber: request.query.chatRoom}).toArray (function (error, result) {
            response.render('chat.ejs', {chatContentData : result, chatData : chatData, userInfo : request.user})
            
        })
    });
})


// 채팅방 클릭 시 작동
app.get('/chatcontent', function(request, response){
    db.collection('chatcontent').find( {roomnumber: request.query.roomnumber}).toArray (function (error, result) {
        response.render('chat.ejs', {chatContentData : result, chatData : chatData, userInfo : request.user})
    })
})

 

 

 

 

 

 

직접해보면서 알게된 점

1. response render를 사용하면 해당 htm(ejs) 파일에 js로 저장해 놓은 변수가 사라진다
-> localStorage로 해결

2. 쿼리스트링이 굉장히 유용하다.