I am trying to access the data in route file which is submitted through form in EJS view. With this room details I will forward to next route with Room id and Room name. The problem is return object is string and can not converted into JSON.
How can I access the Json object room and it's values like room._id, room.roomName
Welcome.ejs
<form action="/chat" method="post">
<div class="form-control">
<label for="username">Display Name</label>
<input type="text" name="username" id="username" placeholder="Enter username..." value="<%= name %>" required />
</div>
<div class="form-control">
<label for="room">Room</label>
<select name="room" id="room">
<% rooms.forEach(function(room){ %>
<option value="<%= room %>" data-roomid="<%= room._id %>" data-roomtype="<%= room.roomType %>"><%= room.roomName %></option>
<% }); %>
</select>
</div>
<div class="form-control">
<input type="hidden" name="email" value="<%= email %>" />
<input type="hidden" name="img" value="<%= img %>" />
<input type="hidden" name="googleId" value="<%= googleId %>" />
<input type="hidden" name="userId" value="<%= userId %>" />
</div>
<button type="submit" class="btn">Join Chat</button>
</form>
Routes.js
route.get('/welcome',
async(req, res) => {
let roomsMap = [];
try{
roomsMap = await Chatroom.find({}).select('roomName roomType userAllowed');
}
catch(err) {
res.status(400).json({ message: "Not able to get rooms" });
};
//roomsMap is returning proprer json
res.render('welcome', {
name: req.session.displayName,
email: req.session.email,
user: req.session.userInfo,
img: req.session.img,
googleId: req.session.googleId,
userId: req.session.userId,
rooms: roomsMap
});
});
route.post("/chat",
(req, res) => {
let postdata = req.body;
let room = postdata.room;
console.log('postdata room ',room);
room = JSON.stringify(room);
console.log('room ', room);
room = JSON.parse(room);
console.log(typeof room);
console.log('room obj ', room);
res.render('chatrooms', {
displayName: postdata.username,
room: postdata.room.roomName,
roomid: room._id,
email: postdata.email,
img: postdata.img,
googleId: postdata.googleId,
userId: postdata.userId
});
});
I have console the output, it would be easier to understand whats happening in background.
postdata room { _id: 5f4f3662cb74553d5e03d076,
roomName: 'PHP',
roomType: 'public' }
room "{ _id: 5f4f3662cb74553d5e03d076,\r\n roomName: 'PHP',\r\n roomType: 'public' }"
string
room obj { _id: 5f4f3662cb74553d5e03d076,
roomName: 'PHP',
roomType: 'public' }