db도 저장되는데 채팅 치면 자동으로새로고침이 안되고
채팅방제목을 눌러야 채팅 새로고침이 됩니다.
server.js
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`);
});
});
chat.ejs
<script>
var 지금누른채팅방id;
var eventSource;
$('.list-group-item').click(function(){
$(this).css('background-color', '#eee');
지금누른채팅방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>`)
});
});
});
$('#send').click(function(){
var 채팅내용 = $('#chat-input').val(); //1, 2
var 보낼거 = {
parent: 지금누른채팅방id,
content: 채팅내용,
};
$.post('/message', 보낼거).then((a) => {
console.log(a)
});
});
</script>