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 :

Fonction retourne undefined


Sujet :

NodeJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut Fonction retourne undefined
    bonsoir,
    j'utilise cette fonction pour récupérer les id des utilisateurs depuis la base de données Mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    getId=function(username){ 
    	connectionDatabase.query("select * from personne where nom=?",[username],function(erreur,lignes,fields){
    		if(!erreur){
    			for(i in lignes){
    				id=lignes[i].id_personne;
    				console.log("success :"+id);//ici les id sont bien récupérés
    			}
    		}
    		else{console.log("erreur getId().");}
    	});
     
    	return id;
    }
    cette fonction s’exécute au moment qu'un utilisateur rejoint la socket.io :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    connectionDatabase.connect(function(erreur){
    if(!erreur){
        console.log("getId (toufik):"+getId(received_data.user)+" getId() (benahmed) :"+getId("xxxxxx"));// le problème est ici, getId() retourne toujours undefined, alors que dans la fonction getId(), la console affiche bien les id !
    }
    });
    quelqu'un pourrait m'expliquer pourquoi je reçois undefined ?

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Dans ta boucle for, la valeur de id de la dernière itération écrase les précédentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    			for(i in lignes){
    				id=lignes[i].id_personne;
    				…
    			}
    		}});
     
    	return id;
    }
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    merci d'avoir pris le temps de me lire Watilin.
    je préfère laisser le Php s'occuper des requêtes mysql au lieu de socket.io , par-ce-que il y'a un certain décalage en millisecondes (a cause de l'asynchrone de socket.io) avant de recevoir les données.
    ce que je fais maintenant, c'est laisser socket.io s'occuper des messages instantanés, puis juste après avoir reçu les messages, je lance une requête ajax pour les enregistrer dans la base de donnée.

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Je ne suis pas sûr de comprendre. Tu me dis que tu as résolu ton problème ?

    Au fait, fais attention, ta variable id n’est pas déclarée, du coup elle est globale. Envisage de passer au mode strict.

    Attention également, la boucle for..in peut s’avérer traître. Puisque tu es sous Node, tu devrais pouvoir utiliser for..of sans souci de compatibilité.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    non, je n'ai pas encore résolu le problème , mais je veux changer la manière d'y procéder .
    a vrai dire, je n'ai pas encore les idées bien claires pour l'instant , je vais essayer de vous expliquer.
    je fais un système de gestion de discussions instantanées, qui permet a tous les utilisateurs d'échanger des messages (texte,audio,vidéo,émoticônes) entre eux.
    pour cela j'ai utilisé socket.io et Nodejs.
    maintenant je pense comment faire pour enregistrer les conversations entre les utilisateurs ?, par-ce-que si j'enregistre chaque message envoyé dans la base de donnée, a un certain moment, la table mysql sera pleine et je crois que c'est à éviter.
    je pense a une idée un peu ordinaire, c'est de sauvegarder les conversations dans des fichiers .json qui seront générer et gérer automatiquement par Nodejs. pour chaque 2 utilisateurs, il y'aura un fichier .json sauvegarder dans un dossier bien précis, qui contient toutes les conversations, puis il me reste qu'a traiter avec ces fichiers.json.
    ça me semble pratique si je ne me trompes pas. non?

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Si tu te soucies de saturer ta base de données, tu devrais aussi te soucier de saturer ton quota d’espace disque.

    Mais avant d’être à court d’espace, tu vas rencontrer un autre problème, celui de la performance. Les bases de données ont été conçues, entre autres raisons, parce que les fichiers n’offraient pas un système de stockage assez efficace. Avec les fichiers, tu as déjà un délai incompressible à cause de fopen ; lors des modifications tu te retrouves avec de la fragmentation, et lors des consultations tu as des temps de recherche sous-optimaux parce que les données sont mal organisées (le système de fichiers n’a pas connaissance de la structure d’un fichier JSON).

    Comme solution hybride, je pense que tu peux archiver dans des fichiers JSON le contenu de ta base le moins fréquemment/récemment utilisé, lors des périodes où ton service est peu utilisé (par exemple la nuit), à l’aide d’une tâche Cron.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Fonction success retourne “UNDEFINED” avec CFC query
    Par coeurdange dans le forum jQuery
    Réponses: 3
    Dernier message: 24/09/2015, 11h26
  2. Réponses: 3
    Dernier message: 08/08/2010, 23h12
  3. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45
  4. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  5. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 14h16

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