マイAPI /auth/login
エンドポイントは、このようなreq.body
取り存在しない場合に約束:。。。エンドポイントでFirebase .orderByChild()equalTo()()を1回、その後()は、子供が
{
"email": "[email protected]",
"password": "supersecretpassword"
}
を、私が作ります私のFirebaseデータベース(https://jacob.firebaseio.com/users
)への参照。私はデータを検索し、req.body.email
と一致するメールを持つ1人のユーザーを見つけたら、データベースに保存されているパスワードとパスワードを比較します。
私はin this Firebase blog postの輪郭を描いた約束の構造に従った。
router.post('/login', function(req, res) {
const ref = db.ref('/users');
ref.orderByChild('email')
.equalTo(req.body.email)
.once('child_added')
.then(function (snapshot) {
return snapshot.val();
})
.then(function (usr) {
// Do my thing, throw any errors that come up
})
.catch(function (err) {
// Handle my errors with grace
return;
});
});
子がref
で見つからない場合、関数は(this answerを参照)進みません。私は投げられたエラーを得ることさえしない。
私の目標は、特定のメールでユーザーが見つからない場合(すなわち、.equalTo(req.body.email)
を満たすref
の子は見つからない)、ユーザーが見つかった場合はコードを実行しないときにコードを実行することです。何も見つからない場合、エラーはスローされません。
コードを実行した後にエンドポイントから完全に切り離そうとする目的で、文をデータベースへのコールの戦略的ポイント(.then()
の約束事の終わり)に追加しようとしました。
.then(function (usr) {
// Do my thing, throw any errors that come up
})
.catch(function (err) {
// Handle my errors with grace
return;
});
res.status(401)
.json({
error: 'No user found',
)};
return;
});
このコードは、呼び出しが非同期であるため、データベースの呼び出しが成功したかどうかに関係なく実行されます。
何も返されない場合、データベースへのこの呼び出しにどのように反応しますかとはまだFirebase約束を使用していますか?