NodeJS で RESTFul API を実装しようとしており、データベース バックエンドとして Mongoose (MongoDB) を使用しています。
次のコード例では、リクエストが同時に送信されたときに同じユーザー名で複数のユーザーを登録しますが、これは私が望んでいるものではありません。チェックを入れてみましたが!
NodeJS の非同期性が原因でこれが発生することはわかっていますが、これを適切に行う方法が見つかりませんでした。「findOne」メソッドがすぐに戻るように見え、registerUser が戻り、別のリクエストが処理されます。
ちなみに、別のAPI関数で既存のユーザーを確認したくはありません。登録段階で確認する必要があります。これを行う方法はありますか?
Controller.prototype.registerUser = function (req, res) {
Users.findOne({'user_name': req.body.user_name}, function(err, user) {
if(!user) {
new User({user_name: req.body.user_name}).save(function(err) {
if(!err) {
res.send("User saved");
} else {
res.send("DB Error: Could not save user!");
}
});
} else {
res.send("User exists");
}
});
}