I am working on a basic express chat app, which has rooms,but for some reason the room I'd changes
- Here is the route script
const singleRoom = async(req: any, res: Response)=> {
const roomId = req.params.id;
if (roomId !== "favicon.png") {
const room = await Room.findById(roomId);
if (room) {
res.render("room", {
room: room,
user: req.user,
title: room.name
})
} else {
res.redirect("/rooms")
}} else {
console.log(req.params)
console.log(req.param("id"))
}
}
Here is the view
extends layout
block content
div(class="p-2 main h-screen fixed" id="main")
a(href="/rooms") rooms
div(class="border p-2 text-center shadow-xl h-[15vh] m-4" x-data="{main: true,desc: false,toggle:()=>{this.main = !this.main;this.desc=!this.desc ;alert(this.desc) }}")
button(@click="toggle" class="border rounded-xl shadow") Toggle
h1=room.name
div(class="p-2 m-2 h-[75vh]" x-show="main")
rooms-msg(messages=room.messages)
input(type="hidden" id="user" value=user )
input(type="hidden" id="room" value=room )
input(name="message" id="message" placeholder="send new message ")
button(class="p-2 rounded shadow" id="send") Send
div(class="m-2 p-2" x-show="desc" x-transition)
h1=room.name
h3 Members
each member in room.members
if room.admin.displayName === member.displayName
div.p-2
h4=member.displayName
p Admin
else
div.p-2
h1=member.displayName
script.
document.addEventListener("alpine:init", ()=> {
})
script(src="/javascripts/pages/room.js")
And here is the room.js
(()=>{
const btn = document.querySelector("#send")
let {
value: room
} = document.querySelector("#room")
let {
value: user
} = document.querySelector("#user")
room = JSON.parse(room)
user = JSON.parse(user)
console.log(room._id)
console.log(user)
const send = (e)=> {
const {
value
} = document.querySelector("#message")
const msg = {
text: value,
sender: user,
time: new Date()
}
room.messages.push(msg)
socket.emit("send message",room, room._id)
console.log(e)
}
btn.addEventListener("click", send)
//
})();
Here is the socket listener
socket.on("send message", async (room, id)=> {
const r = await Room.findByIdAndUpdate(room._id, room)
if(r){
console.log(r)
}else{
console.log(id)
}
// Successful: r
})
The room always return null,so the id gets logged,I noticed the id was different from the one in the url,so I tried again and it logged a different id,I am really confused.Thanks in anticipation