チャットアプリケーションの作成-socket(4)
最後に,ルーティングの部分コードをsocket通信を利用できるように修正した.
routes/index.js
router.post('/room', isLoggedIn, async (req, res, next)=>{
try{
const newRoom=await Room.create({
title:req.body.title,
max:req.body.max,
owner:req.user.nick,
password:req.body.password,
});
const io=req.app.get('io');
io.of('/room').emit('newRoom', newRoom);
res.redirect(`/room/${newRoom._id}?password=${req.body.password}`);
}catch(error){
console.error(error);
next(error);
}
});
router.get('/room/:id', isLoggedIn, async(req, res, next)=>{
try{
const room=await Room.findOne({_id:req.params.id});
const io=req.app.get('io');
if(!room){
return res.redirect('/?error=존재하지 않는 채팅방입니다.');
}
if(room.password&&room.password!==req.query.password){
return res.redirect('/?error=비밀번호가 틀렸습니다.');
}
const {rooms}=io.of('/chat').adapter;
if(rooms&&rooms[req.params.id]&&room.max<=rooms[req.params.id].length){
return res.redirect('/?error=허용 인원이 초과했습니다.');
}
const chats=await Chat.findOne({room:room._id}).sort('createdAt');
return res.render('chat',{
room,
title:room.title,
chats,
user:req.user.nick,
});
}catch(error){
console.error(error);
return next(error);
}
});
router.delete('/room/:id', isLoggedIn, async(req, res, next)=>{
try{
await Room.remove({_id:req.params.id});
await Chat.remove({room:req.params.id});
res.send('ok');
setTimeout(()=>{
req.app.get('io').of('/room').emit('removeRoom', req.params.id);
}, 2000);
}catch(error){
console.error(error);
next(error);
}
});
各ルータには関数が追加され、イベント発生時にhtmlを使用してイベントの発生を通知します.Reference
この問題について(チャットアプリケーションの作成-socket(4)), 我々は、より多くの情報をここで見つけました https://velog.io/@jaehyeon2/채팅-앱-만들기-socket4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol