javascript - 使用 mongoose 从 MongoDB 更新 FrontEnd 上的列表并做出反应
问题描述
我正在建立一个网站,用户可以在其中实时选择飞机上的座位。在主页上,他们选择座位号,然后使用 mongoose 将其发送到 mongoDB 数据库。但是,当用户选择一个座位时,我不希望其他用户能够从列表中选择同一个座位,因为它已被占用。
我应该怎么做才能只在主页的下拉列表中显示可用座位?我正在考虑使用套接字,但我很难找到一种方法来了解哪些座位可用,哪些不是基于 mongo 数据库集合中的现有用户。
我正在使用 react 并且对编码比较陌生。
谢谢您的帮助!
解决方案
所以这是我可以探索的一个可能的解决方案(我相信肯定有更多的解决方案,但目前在写这篇文章时,这是我能想到的解决方案)。
- 所以我假设你可能有用户模型,假设模型看起来有点像下面这样:
const userSchema = mongoose.Schema({
username:{type:String, required:true},
email:{type:String, required:true, email},
password:{type:String, required:true}
})
const userModel = mongoose.model('userModel', userSchema);
- 因此,我们已经设置了所有用户模型,并且我们可以通过 mongoose 或我们设置为唯一的电子邮件提供的_id来唯一地识别用户。
所以现在我们需要一个飞机旅行模型:
const planeTripSchema = mongoose.Schema({
from:{type:String, required:true},
to:{type:String, required:true},
seats:{type:Array, required:true}
});
const planeTrip = mongoose.model('planeTrip', planeTripSchema);
- 现在我们有一个飞机旅行模型。
- 所以现在我该如何处理你的座位阵列中有不同的座位
创建飞机旅行以设置唯一值以识别每个座位时的实现:
- 所以首先我会安装uuid
npm i uuid
或yarn add uuid
- 所以现在这取决于这趟航班可以乘坐多少人,假设它需要 10 人。
所以这种方式可能不是最有效的解决方案,但这是我目前在写这篇文章时的想法
因此,现在您的目标是设置 10 个座位,然后才能节省飞行行程
那么你要做的是你可以有10个变量seat1-seat10(这是这个解决方案效率低下的地方)并调用他
uuid
的lib来获取唯一标识符(将返回唯一编号)然后下面是您如何实例化新航班
const newFlight = new planeTrip({
from:'New York',
to:'Washington DC',
seats:[
{
occupied:false
seat_id:<use the variable you made when using uuid for seat1-10
seat_number:1 // You can then populate each sit number self from 1-10 on each entry but id you'll get fom uuid
person:"",
}
//So you can do this 10 time because plane supports 10 seats in this exampl
]
})
- 因此,现在当您将文档保存到 mongoDB 时,您就有了可以唯一标识的席位
那么现在你如何处理占用的座位:
因此,现在在客户端,当您请求获取航班座位详细信息时,您将使用 JavaScript 映射映射座位数组,然后检查是否被占用 === true,正如我们上面写的那样
所以这是真的,那么你可以原样离开
否则,如果它为假,您可以使用 CSS 在座位号上加下划线
这意味着您的 css 类还必须进行一些三元运算
一个普通用户肯定会知道它被占用了
然后,当用户单击可用的座位时,您会通过座位号和座位号坐下,当您映射座位数组时,这些座位号和座位号很容易获得
不要忘记您还必须通过用户的电子邮件发送,因为在我们的示例中,我们使用电子邮件唯一标识我们的用户
然后在后端,您唯一要做的就是将您从客户端获得的坐席 ID 从false更新为true
您还将人员从空字符串更新为从客户端收到的电子邮件
所以这是一个可能的解决方案,如果你坐下来仔细考虑,可以改进,但至少我给了你一个方向的起点,但我相信这个解决方案可以改进为比这更有效
推荐阅读
- r - lmer 错误无法评估分组因子
- ms-access - 更新服务器名称连接访问 2013
- data-structures - 当我链接迭代器而不是收集到临时 HashSet 时,为什么会得到不一致的结果?
- internet-explorer - FFMpeg 从 avi 到 mp4 的转换对于 safari 和 IE 浏览器的视频不成功
- python - Datadog 如何在 Flask 应用程序上实现 ddtrace?
- azure - Azure 应用程序网关重定向
- python - 花旗数据下载
- powershell - 为什么在函数中的 return 语句之后打印 Write-Host 消息?
- javascript - 是否有可用于 Umple 的 Javascript 代码生成器?
- sql-server - 如何编写 sql 代码来接受子查询中的聚合函数?