提交房间预订后MongoDB部分字段为空问题求助
房间预订字段更新为空问题排查与解决
提交房间预订请求后,MongoDB中Booked_Status字段已成功更新为true,但customerName、date、startTime、endTime字段虽已添加却为空。
相关代码
router.post('/booking',async(req,res)=>{ await client.connect() try{ data={ customerName:"", date:"", startTime:"", endTime:"", room_ID:"" } const db =await client.db(dbName) let requests = await db.collection('RoomCreation').find({room_ID:req.body.room_ID}).toArray();//获取数据 console.log(requests) if(requests[0].Booked_Status===true){ res.send({ statusCode:400, message:"房间已被预订" }) } else{ let postroom=await db.collection('roombook').insertOne(req.body);//在另一个集合中创建记录 let room=await db.collection("RoomCreation").findOneAndUpdate({room_ID:req.body.room_ID},{$set:{Booked_Status:true,customerName:req.body.customerName,date:req.body.date,startTime:req.body.startTime,endTime:req.body.endTime}}) //更新主集合中的字段 console.log(room) res.send({ statusCode:200, data:room, data:postroom, message:"房间预订成功" }) } } catch(error){ console.log(error) res.send({ statusCode:500, message:"内部服务器错误", booked:false, error }) } finally{ client.close() } })
请求输入
{ "Customer_Name":"kranthi", "Date":"03-01-2022", "Start_Time":"19:00", "End_Time":"23:00", "room_ID":"201" }
MongoDB输出
_id:6340d27d827a4536d5b0a952 room_ID:"201" Seats_Available:5 Amenities: Array Price:"8000" Booked_Status:true customerName:null date:null endTime:null startTime:null
问题原因与解决方法
问题核心是请求参数的键名与代码中读取的键名不匹配:
- 请求里的用户信息键名是
Customer_Name、Date、Start_Time、End_Time(首字母大写+下划线分隔) - 代码中读取的是
req.body.customerName、req.body.date(驼峰命名)
JavaScript是大小写敏感的,两者属于不同属性,导致代码读取不到请求中的值,最终更新到MongoDB的字段为空。
修改findOneAndUpdate中的$set部分,对应正确的请求键名即可:
let room=await db.collection("RoomCreation").findOneAndUpdate( {room_ID:req.body.room_ID}, { $set:{ Booked_Status:true, customerName:req.body.Customer_Name, date:req.body.Date, startTime:req.body.Start_Time, endTime:req.body.End_Time } } )
如果需要更规范的参数处理,也可以先做键名映射:
const { Customer_Name, Date, Start_Time, End_Time, room_ID } = req.body; const bookingData = { customerName: Customer_Name, date: Date, startTime: Start_Time, endTime: End_Time, room_ID }; // 后续使用bookingData进行插入和更新操作
内容的提问来源于stack exchange,提问作者Saiteja
相关产品推荐
相关产品推荐

