2011-08-13 22 views
0

Je me demandais si quelqu'un pouvait me montrer comment obtenir une valeur de chaîne de mongodb et la stocker dans une variable.Stocker les données de MongoDB dans variable - mongoose et node.js

db.model("users").findOne({username: username, password: password}, {type:1}, 
    function(err, data) { 
     if(err) { 
      return "Error"; 
     } else if() { 
      return "No records"; 
     } else { 
      return data.type; 
     } 
    } 
); 

Je reçois la valeur de type lorsque je l'exécute. Mais comment puis-je stocker cela dans une variable en dehors de cette fonction?

Répondre

2

La valeur de retour de votre fonction anonyme est complètement ignorée. Vous pouvez stocker la variable n'importe où accessible depuis votre portée actuelle. Par exemple.

var Database = function { 
    var myText = null; 

    return {  

    getUser: function(username, password, callback) { 
     db.model("users").findOne({username: username, password: password}, {type:1}, 
      function(err, data) { 
      if (err) { 
       myText = "Error"; 
      } 
      else if (data.length == 0) { 
       myText = "No records"; 
      } 
      else { 
       myText = data.type 
      } 

      $('.log').html(myText); 
      callback(myText); 
     }); 
    }; 
    }; 
}(); 

De server.js, alors vous pouvez appeler:

Database.getUser(username, password, function(theText) { alert(theText); }); 

Vous aurez besoin d'être intelligent sur la façon dont les différents éléments interagissent depuis Javascript avec callbacks ne fonctionne pas de manière synchrone. Cela dit, il devrait être possible d'atteindre le résultat que vous recherchez. Profitez et codage heureux!

+0

Le problème est que j'ai un fichier Server.js qui appelle la fonction getUserType dans le fichier Database.js. La chose est que je ne sais pas comment obtenir la valeur de base de données.js à server.js. – chris

+0

Vous devez passer une fonction de rappel dans 'findOne' à partir de Server.js directement. Il est difficile de passer des variables autour de la façon dont vous suggérez que MongoDB n'est pas synchrone. Je suggère de ne pas encapsuler 'findOne' dans database.js, car MongoDB était basé sur la meilleure pratique pour traiter les callbacks (c'est-à-dire que vous passez un callback dans' findOne' à l'endroit exact où il est appelé). Cela dit, vous pouvez toujours boucler un callback en encapsulant et en passant le callback dans database.js. Cela a-t-il du sens? – ghayes

+0

il fait: D Je vais juste mettre la fonction findOne dans le serveur et l'exécuter comme ça. Je pensais juste que je séparerais de base de données avec le serveur afin que tout semble un peu ordonné. – chris

Questions connexes