IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Utiliser les paramètres de la requête GET dans un callback mysql


Sujet :

NodeJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Par défaut Utiliser les paramètres de la requête GET dans un callback mysql
    Bonjour,

    Je développe une application RESTful. J'avais développé la partie serveur en PHP mais j'ai découvert il y a peu de temps Node.js et son module restify et j'ai été comblé.

    Néanmoins, sur la partie mysql, je bloque carrément :

    J'ai une méthode qui permet d'identifier un user (c'est un test, merci de ne pas parler sécurité) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    server.get('/login/:username/:password', function(req, res, next)  {
        var statusCode = 1;
        var token = '';
        var username = req.params.username;
        var password = req.params.password;
        db.read('account', {username:username}, ['username' 'password'], function(err, data) {
            if (md5(password) == data[0].password) {
                statusCode = 0;
                var date = new Date();
                token = md5(date.getTime()+username+password);
            } else {
                statusCode = 2;
            }
            res.send({status: statusCode, token: token});
        });
    });
    Ce code teste l'existence du login passé dans la requête GET et vérifie que le mot de passe indiqué correspond à celui en base.
    Je souhaite à la fin envoyer le statusCode ainsi qu'un token.
    Le problème est que les variables déclarées en dehors du callback mysql ne sont pas connus (statusCode, token, username, password).

    Pour info db.read c'est un raccourci pour le select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function read(table, where, columns, callback) {
        var columnsClause = (columns ? columns.join(', ') : '*');
        var q = 'SELECT ' + columnsClause + ' FROM ' + table;
        if (where) {
            var clause = hashToClause(where, ' AND ');
            q += ' WHERE ' + clause.clause;
        }
        client.query(q, (where ? clause.values : callback), callback);
    }
    J'ai encore un peu de mal avec ces callbacks à tout va. Quelqu'un aurait-il l'aimable obligeance de m'expliquer la bonne technique ?

    Merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Citation Envoyé par houpli Voir le message
    Le problème est que les variables déclarées en dehors du callback mysql ne sont pas connus (statusCode, token, username, password).
    Est tu sure que le problème vient de la ? Car toute tes variables (statusCode, token, username, password) sont syntaxissement accessibles dans ton bout de code, c’est tous l’intérêt du JavaScript comme choix de langage asynchrone.

    C’est peu probable, mais si le module appelant ta callback est écrite en c/c++, il est possible, avec l’api V8, de créer un nouveau contexte d’exécution.Si c’est le cas de ton module, alors change le vite!

Discussions similaires

  1. [WD10] Comment imprimer les paramêtres d'une requête dans un Etat?
    Par amilas dans le forum WinDev
    Réponses: 2
    Dernier message: 25/08/2009, 00h22
  2. Réponses: 1
    Dernier message: 28/08/2008, 22h37
  3. Réponses: 5
    Dernier message: 20/03/2007, 17h55
  4. Réponses: 28
    Dernier message: 09/01/2007, 16h30
  5. Réponses: 6
    Dernier message: 07/04/2006, 01h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo