ユーザーを作成する前に、メールとユーザー名の一意性についてデータベースをチェックする create メソッドを持つユーザーコントローラーがあります (これは、一意の属性フラグを尊重しない SailsJS の mongodb adpater のバグを回避するためのものです - バージョン 0.10 .5)。
コードは次のようになります。
User.find({ email: req.body.email }, function (err, user) {
if(user) {
return res.badRequest('Unique email constraint. Email is already used.');
}
});
User.create(req.body).exec(function (err, user) {
// Code to catch and manage err or new user
}
私が期待しているのは、電子メールがデータベース (mongodb) に既に存在する場合、res.badRequest() を使用して 400 を送信すると、実行が終了することです。
何が起こるかというと、応答が送信された後、制御が User.create() に移動します - 実行は終了しません。return res.badRequest が制御を呼び出し元の関数 (User.findOne) に戻していると思われ、そこから実行が続行されます。
res.badRequest().end() を使用しようとしましたが、クライアントがハングしたままになり (応答がありません)、res.badRequest() が返された後に res.end() を使用すると「ヘッダー送信」エラーが発生しました。
既存の電子メールが見つかった場合、このリクエストの実行を終了するにはどうすればよいですか?