2013-03-30 3 views
1

J'utilise le cadre Node Express pour construire une API et je rencontre un problème en ce qui concerne la fonctionnalité de base Auth. J'ai besoin d'exécuter une requête SQL pour récupérer des informations sur un utilisateur et valider ses informations d'identification. Le problème se produit après que la requête a été terminée. Les données SQL sont envoyées dans une fonction de rappel comme indiqué ci-dessous. Je veux faire tout la validation dans ce rappel, mais je veux sortir de la fonction de rappel SQL et return true/false de la fonction express.basicAuth(). J'ai essayé de placer une variable globale et l'accès à l'extérieur de la fonction de rappel SQL mais parfois la requête peut-être pas terminé au moment où il obtient le bloc qui accède à cette variable globale. Merci d'avance pour votre aide.Node.js - Sortir de la fonction de rappel et return true/false dans le parent functon

var auth = express.basicAuth(function(user, pass) { 

    // Query to select information regarding the requested user 
    /* Query here to find the requested user's data */ 

    client.query(query, function (err, rows, fields) { 
     if (err) throw err; 
     GLOBAL.sql = rows; 

     /* I want to break out of this query callback function and return true from this auth variable */ 

    }); 

     // Sometimes the query isn't completed when it gets to this stage 
     console.log(JSON.stringify(GLOBAL.sql)); 


}); 
+1

Vous devez effectuer tous les traitements concernant 'rows' dans le rappel. JavaScript étant non bloquant, votre 'console.log' devrait être souvent exécuté avant que la requête SQL ne soit terminée. N'utilisez pas de «GLOBAL», continuez simplement dans le rappel. Et se termine par une déclaration 'return ...'. – maxdec

Répondre

2

express.basicAuth prend également en charge le fonctionnement asynchrone:

var auth = express.basicAuth(function(user, pass, next) { 
    ... 
    client.query(query, function (err, rows, fields) { 
    if (err) 
     next(err); 
    else 
    if (/* authentication successful */) 
     next(null, user); // <-- sets 'req.remoteUser' to the username 
    else 
     next(null, false); 
    }); 
}); 
+0

Cela l'a résolu. Merci Robert – narruc

Questions connexes