-
글쓴이글
-
2022년 5월 27일 20:49 #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
);
});
});
채팅 보내면 왼쪽으로 다 쏠리는데
내가 보낸 채팅은 오른쪽으로 보낼려고 하면 어떻게 해야 하나요
2022년 5월 27일 22:35 #35059
codingapple키 마스터forEach 반복문 돌릴 때
a라는 데이터에 들어있는 작성자id가 지금 로그인된 작성자id와 일치하면
우측으로 보내라고 코드를 짜면 될듯요 우측으로 보내려면 css 스타일같은거 주면 됩니다
2022년 5월 28일 11:02 #35078
ㅠㅠㅠ참가자forEach문 안에 if문 써서
하는건 알겠는데 보낸사람의id는 userid이고 내 지금 로그인 된 작성자 id는 어떻게 하죠?
2022년 5월 28일 16:03 #35090
codingapple키 마스터로그인성공헀을 때 유저id를 서버에서 보내서
브라우저 localstorage에 저장해두거나 그러면 꺼내쓰기 쉽습니다
-
글쓴이글
- 답변은 로그인 후 가능합니다.