다른 기능은 다 구현되는데 실시간으로 갱신되지 않습니다.
하루종일 찾아봐도 안 나와서 질문 올려봅니다.
또한 채팅방을 여러번 클릭하면 어느순간부터 빈 채팅방만 보여주는데 왜 그런건가요?
chat.ejs
<hr />
<script>
$('#send').click(function(){
var 채팅내용 = $('#chat-input').val();
var 보낼거 = {
parent: 지금누른채팅방id,
content: 채팅내용,
}
$.post('/message', 보낼거).then((e)=>{
console.log(e)
});
});
var 지금누른채팅방id;
var eventSource;
$('.list-group-item').click(function(){
지금누른채팅방id = this.dataset.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
<hr />
app.get('/message/:parentid', 로그인했니, function(req, res){
res.writeHead(200, {
"Connection": "keep-alive",
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
});
db.collection('message').find({ parent: req.params.parentid }).toArray()
.then((rs)=>{
console.log(rs);
res.write('event: test\n');
res.write(`data:${JSON.stringify(rs)}\n\n`);
});
const 찾을문서 = [
{ $match: { 'fullDocument.parent': req.params.parentid } }
];
const changeStream = db.collection('message').watch(찾을문서);
changeStream.on('change', (result) => {
console.log(result.fullDocument);
var 추가된문서 = [result.fullDocument];
res.write(`data:${JSON.stringify(추가된문서)}\n\n`);
});
});