mangosta no proporciona error en la función de búsqueda

Al tratar de construir algunas estadísticas con Mongoose, parece que no puedo acceder al argumento de error cuando llamo a find() o findOne(). Aquí está mi estática:

User.statics.authenticate = function(login, password, cb){
    return this.model('User').findOne({
        username: login, 
        password: password
    }, function(err, user){
        console.log("error", err);
        console.log("user", user);
    }).exec(cb);
};

Estoy tratando de llamarlo con algo como esto:

exports.session = function(req, res){
    return User.authenticate(req.body.login, req.body.password, function(err, doc){
        console.log('err', err);
        console.log('doc', doc);
    });
};

En todas las circunstancias, independientemente de los resultados de la consulta findOne, err siempre es nulo. ¿Alguna idea de lo que está pasando aquí? Tal vez simplemente no puedo entender todas estas devoluciones de llamada...

preguntado el 04 de julio de 12 a las 01:07

2 Respuestas

Aparentemente, un resultado de consulta vacío no es en realidad un error, por lo que 'err' permanece nulo a pesar de no encontrar un resultado. Por lo tanto, debe probar si el 'usuario' es nulo o no, y luego crear su propio error.

Respondido 05 Jul 12, 05:07

No puedo creer que acabo de gastar dos horas en eso. - Adán Waite

@AdamWaite Casi lo acabo de hacer. Esto es Loco. - antrickshy

No estoy seguro de que explique lo que está viendo, pero si proporciona una función de devolución de llamada directamente a findOne entonces no llamas exec. Entonces, su función de autenticación debería verse así:

User.statics.authenticate = function(login, password, cb){
    this.model('User').findOne({
        username: login, 
        password: password
    }, function(err, user){
        console.log("error", err);
        console.log("user", user);
        cb(err, user);
    });
};

Respondido 04 Jul 12, 02:07

Esto no solucionó mi problema (ver más abajo), pero es un consejo útil independientemente. Gracias. - bento

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.