针对竞争条件的Mongoose自定义验证功能

时间:2017-12-04 23:04:15

标签: node.js mongodb validation mongoose race-condition

我们有一个日历API,用于在一天内预订广告位

SlotShcema

endDateTime = startDateTime +  duration

我们可以计算插槽结束

<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "database"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } session_start(); $result = $conn->query('SELECT mail FROM check_out ORDER BY id DESC LIMIT 1'); $to = $result->fetch_assoc(); mail($to['mail'] , "ORDER", "Your order is placed !","From: vape@v.com"); $_SESSION['message'] = "Order placed successfuly"; if (isset($_GET['up'])) { $Orderid = (int) $_GET['up']; $stmt = $conn->prepare('DELETE FROM check_out WHERE id=?'); $stmt->bind_param('i', $Orderid); $stmt->execute(); } $conn->close(); header('location:index.php');

我们想要添加验证,因此没有两个插槽相交,只有一个用户可以预订。

我找到了服装Github,但我们找不到任何适用于我们情景的文档。

问题是找到解决竞争条件的方法,其中两个并发保存可能会保存冲突的预订&#34;交易&#34; 。我在开始创建插槽之前做了我自己的验证功能,但是如果存在竞争条件,它可能同时保存两个插槽,这是错误的。 有没有办法解决竞争条件?

GitHub问题Async Custom Validators

1 个答案:

答案 0 :(得分:0)

为我工作的最后工作是使用回调调用队列中的函数。它适用于我,但它有点慢。

这是一个例子JS-Promise-Race-Condition-Queue

如果你想让这个解决方案更快,你应该为每个交集创建队列,这将导致并发冲突。例如日期范围。

您应该按照上面的github问题链接了解有关情况的更多信息。