私は、データベースになり、ユーザのためのシンプルなAPIでNode.jsの非同期呼び出しの周りGETルートをトラブル理解の非同期が
を私の頭を取得し、トラブルのビットを持っていると思うと、コールバックでユーザー情報を返します。
しかし、私は呼び出しの認証トークンを受信し、ユーザー情報を返すためにデータベース内の対応する電子メールを見つける必要があるルートミドルウェアを持っています。
私は与えられたトークンによって電子メールを探し、電子メールアドレスを返す関数を作成しました。この問題は、(いくつかの調査をした後で)非同期呼び出しから情報を返して、まだ待っている情報を必要とするコードを実行しないようにするべきです。
データベースのルックアップを電子メールが必要なルートに移動する方法があります。これの欠点は、私には、これが大きなコードではない大きなコードを複製する必要がある他の場所があるということです...
私はデータベースの検索を同期させる必要がありますか?これも可能ですか?これはコードを複製することだけのように見えます。
また、電話をかけて送信するには、ユーザー側のメールをクライアント側に保存する必要がありますか?私はユーザー情報のクライアント側を保存しないようにしたいので、これはまた悪いようです。
私はすべてのソリューションが欠けていますか?
私はあなたの考えを聞いています!
私の状況の簡素化:あなたはユーザーPromises
router.route('/firstroute/:token')
.get(function (req, res) {
getEmail(req.params.token)
.then((email) => {
res.send({ email });
// find and send back user info
});
})
router.route('/someotherroute/:token')
.get(function (req, res) {
// I also need the email lookup here..
getEmail(req.params.token)
.then((email) => {
res.send({ email });
});
})
var getEmail = function (token) {
// look in session database for email belonging to this token
return new Promise((resolve, reject) => {
User.findOne({ 'token': token }, function (err, session) {
// check for err
if (err) {
return reject(err);
}
resolve(session.email);
});
});
}
にあります
router.route('/firstroute/:token')
.get(function(req, res) {
var email = getEmail(req.params.token);
// find and send back user info
})
router.route('/someotherroute/:token')
.get(function(req, res) {
// I also need the email lookup here..
var email = getEmail(req.params.token);
})
getEmail: function(token) {
// look in session database for email belonging to this token
User.findOne({'token': token}, function (err, session) {
// check for err
return session.email;
});
}