私はいくつかの継承されたコードをリファクタリングしようとしています。すべてのエンドポイントで同じ検証コードが使用されていました。私はそれをそれ自身の方法に引き出したい。私は約束を新しくしていますが、それは私が使いたいと思うものです。問題は、promはUser.findOneコールで解決され、未定義のprom.promiseで終了するようです。マングースは間違った約束(ノードjs)を満たすようです
歓声 ボブ
function validateUser(req) {
var prom = q.defer();
var token = getToken(req.headers);
if (token) {
console.log("have a token")
var decoded = jwt.decode(token, config.secret);
console.log("now going to look for the user")
//Problem exit is on next line
User.findOne({
name: decoded.name
}, function (err, user) {
if (err) throw err;
prom.reject(err);
if (!user) {
console.log("no user found")
prom.reject("Authentication failed. User not found.")
} else {
console.log("user found returning true")
prom.resolve(true);
}
})
} else {
console.log("no token found")
prom.reject("No token provided.")
}
return prom.promise;
}
[繰延反パターン](http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-それ)。あなたがコールバックを渡さないと、Mongooseはすでに約束を返します。 – Bergi