NodeJs et MySQL

Messages postés
6
Date d'inscription
vendredi 5 juin 2009
Dernière intervention
16 février 2014
- - Dernière réponse : @karamel
Messages postés
1663
Date d'inscription
vendredi 9 mai 2008
Statut
Modérateur
Dernière intervention
3 novembre 2018
- 5 oct. 2015 à 10:55
Bonjour à tous,
je m'essaye à node js et MySql. je connaissais javascript, mais là je découvre une nouvelle syntaxe et des concepts qui me sont encore flou...

Voici ma question

/** Gestion des palettes */
app.get('/GestionDesPalettes',[requireLogin],function(req, res, next){
  var TotalPalettes;
  var sSQL = 'SELECT sum(NB_PALETTES) as nbPalettes FROM t_utilisateur_collecte';
  connection.connect;
  connection.query(sSQL, function(err,rows,fields){
    if (err != null){
      res.end('Query error n° :' + err)
    }
    else{
      if (rows.length>0){  
        console.log("totalPalettes = " + rows[0].nbPalettes);
        totalPalettes= rows[0].nbPalettes
      }
      else{
        console.log("Pas de palettes");  
      }  
    }
  });
  res.render("GestionDesPalettes", { "username": req.session.username, "totalPalettes": totalPalettes});
});


Ma question et donc la suivante, comment faire pour récupérer le contenu de la variable totalPalettes

Si quelqu'un à une idée...

Merci a tous d'avance
Afficher la suite 

Votre réponse

3 réponses

Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Dernière intervention
20 juin 2014
0
Merci
Hello,

Désolé krzysiu, ma réponse n'est certainement pas celle à laquelle tu t'attendais, mais bon...

Je ne connaîs pas node js (c'est donc mal parti :)), par contre ça m'a donné envie d'y jeter un oeil (merci à toi quoi ;)), et de ce fait j'ai trouvé ce tuto :

http://fr.openclassrooms.com/informatique/cours/des-applications-ultra-rapides-avec-node-js

Peut-être te sera-t-il utile...

Ton console.log("totalPalettes = " + rows[0].nbPalettes); te renvoie bien des données ?

A+
krzysiu
Messages postés
6
Date d'inscription
vendredi 5 juin 2009
Dernière intervention
16 février 2014
-
Merci de t'intéresser à mon problème.
Le line que tu donnes m'as effectivement permis d'aborder nodejs.


console.log("totalPalettes = " + rows[0].nbPalettes);, me renvoie le resultat d'un calcul fais dans le requête. Cela fonctionne parfaitement.
ce résultat , je le met ensuite dans une variable (totalPalettes= rows[0].nbPalettes).

mon problème, c'est que cette variable perd son contenu si je la consulte en dehors de : connection.query(sSQL, function(err,rows,fields){ ...}
malgré une déclaration en globale. ?!? c'est là que j'ai du loupe un truc

le problème est plus javascript que Node JS
Commenter la réponse de BBFUNK01
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
Bonjour,

Je ne code pas non plus avec node..

Déjà.. n'aurais tu pas oublié un point-virgule ?
totalPalettes= rows[0].nbPalettes


SInon :
mais sans avoir testé.. à tout hasard, cela pourrait-il corriger ton souci .?

** Gestion des palettes */
app.get('/GestionDesPalettes',[requireLogin],function(req, res, next){
  
  var sSQL = 'SELECT sum(NB_PALETTES) as nbPalettes FROM t_utilisateur_collecte';
  connection.connect;
  var TotalPalettes=connection.query(sSQL, function(err,rows,fields){
    if (err != null){
      res.end('Query error n° :' + err)
    }
    else{
      if (rows.length>0){  
        console.log("totalPalettes = " + rows[0].nbPalettes);
        return rows[0].nbPalettes;
      }
      else{
        console.log("Pas de palettes");  
      }  
    }
  });
  res.render("GestionDesPalettes", { "username": req.session.username, "totalPalettes": totalPalettes});
});

krzysiu
Messages postés
6
Date d'inscription
vendredi 5 juin 2009
Dernière intervention
16 février 2014
-
Merci de ta réponse,

bien sur il manque un ;

j'avais déjà essayer ta solution, mais ça marche pas non plus.

pour le moment, j'ai détourné le problème pour faire une démo. mais le problème reviendra sur le tapis.

Merci encore pour vos suggestions
c'est un peu tard mais bon

c'est pas grave le ';', c'est du JS les ';' ne sont pas obligatoire sauf si les instructions sont sur la même ligne
Commenter la réponse de jordane45
Messages postés
1
Date d'inscription
dimanche 4 octobre 2015
Dernière intervention
4 octobre 2015
0
Merci
c'est un peu tard mais bon,

il faut pas oublier que c'est du JS c'est de l'asynchrone. il faut pas penser comme pour PHP ou autre

1- dans la ligne 6, connection.query retourne un objet query pas une valeur
c.a.d, que même avec un return il est pas possible de récupérer la valeur voulu
il faut connaître le type de retour des fonctions pour bien ecrire du code et avoir le bon résultat :D

2- j'explique un peu

si on fait ca
var func = function () {
  var TotalPalettes;

  connection.connect;

  var sSQL = 'SELECT sum(NB_PALETTES) as nbPalettes FROM t_utilisateur_collecte';
  connection.query(sSQL, function(err,rows,fields){
    if (err != null){
      res.end('Query error n° :' + err)
    } else{
      if (rows.length>0){  
        TotalPalettes = rows[0].nbPalettes;
      } else{
        console.log("Pas de palettes");  
      }  
    }
  });

  console.log("TotalPalettes = " + TotalPalettes)
}

func()

on peut pas savoir quand TotalPalettes sera remplie car
console.log("TotalPalettes = " + TotalPalettes)
n'attendra pas la fin de l'exécution de l'instruction précédente (c'est de l'asynchrone)
c.a.d elle affichera "TotalPalettes ="

mais si on fait ca
var func = function (callback) {
  connection.connect;

  var sSQL = 'SELECT sum(NB_PALETTES) as nbPalettes FROM t_utilisateur_collecte';
  connection.query(sSQL, function(err,rows,fields){
    if (err != null){
      res.end('Query error n° :' + err)
    } else{
      if (rows.length>0){  
        callback(rows[0].nbPalettes);
      } else{
        console.log("Pas de palettes");  
      }  
    }
  });
}

func(function(TotalPalettes){
  console.log("TotalPalettes = " + TotalPalettes)
})

la c'est bon

j'espère que c'est un peu plus clair
@karamel
Messages postés
1663
Date d'inscription
vendredi 9 mai 2008
Statut
Modérateur
Dernière intervention
3 novembre 2018
-
il ne te reste plus qu'a nous faire un tuto :)
Commenter la réponse de kazari

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.