Ich versuche, einige geerbten Code zu refaktorieren. In jedem Endpunkt war derselbe Validierungscode. Ich möchte es in seine eigene Methode herausziehen. Ich bin neu in Versprechungen, aber ich denke, das ist es, was ich verwenden möchte. Das Problem scheint, dass der Abschlussball beim Aufruf von User.findOne aufgelöst wird und mit einem nicht definierten prom.promise endet.Mongoose scheint falsche Versprechen zu erfüllen (Knoten js)
prost bob
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;
}
Fallen Sie nicht für die [latente antipattern] (http://stackoverflow.com/q/23803743/1048572?What-ist-promise-construction-antipattern-and-how-to-vermeiden- es). Mongoose gibt bereits Versprechungen zurück, wenn Sie einen Rückruf nicht bestehen. – Bergi