2014-08-31 4 views
1

J'essayais mongodb et nodejs sur openshift, en utilisant mongojs pour l'interface entre nodejs et mongodb.comment interroger mongodb à partir de nodejs via le module mongojs? (le serveur est openshift)

Dans mongoshell j'ai couru "use nodejs" et j'ai défini une collection "scores". J'ai sauvegardé quelques données dedans et les montre correctement.

Dans app.js fichier nodeserver je

self.routes['/db'] = function(req, res) { 
var db = require("./db"); 
     db.scores.find(function(err,docs){res.send(docs);});   
    }; 

et dans le fichier db.js je

var dbName = "/nodejs"; 
var databaseUrl = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" + process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" + process.env.OPENSHIFT_MONGODB_DB_HOST + ":" + process.env.OPENSHIFT_MONGODB_DB_PORT+ dbName; 
// "username:[email protected]/mydb" 
var collections = ["scores"] 
var db = require("mongojs").connect(databaseUrl, collections); 
module.exports = db; 

Je suis incapable d'obtenir les données quand je vais à url mondomaine. com/db

Quelqu'un peut-il s'il vous plaît signaler ce qui ne va pas. La base de données est en cours de connexion. Je suis incapable de trouver tout de la collection de partitions.

self.routes['/db'] = function(req, res) { 
    var db = require("./db"); 
    db.scores.find(function(err,docs){res.send(docs);});   
}; 
+1

Bienvenue dans Stack Overflow! Bien que votre question semble bien réfléchie, je vous conseille de changer le titre de votre question pour mieux décrire le problème que vous rencontrez, comme "Node.js avec MongoDB et Openshift ne routage pas correctement". –

+0

Merci pour la suggestion. Je pense que ce serait plus utile pour quelqu'un dans le futur. Va le changer en conséquence. Aussi, ce n'est pas sur le routage. Juste incapable d'interroger correctement de nodejs à mongodb via mongojs – codefire

Répondre

0

La configuration de connexion db que j'ai enregistrée dans un fichier séparé était celle qui provoquait l'erreur. Cette configuration a fonctionné et j'ai pu aller chercher des entrées db. Utilisez le bloc commenté OU le code ci-dessous. Les deux font la même chose. Juste poster cette réponse pour quelqu'un qui essaie sur openshift. Nodejs est le nom de la base de données utilisée dans laquelle les "livres" de la collection ont été stockés. Défini var mongojs = require ('mongojs'); tout en haut où toutes les variables ont été déclarées, mais peu importe si c'est juste déclaré avant que la variable mongojs soit utilisée.

1

Je pense que vous devriez utiliser la méthode de collecte pour utiliser votre collection de partitions. Comme le suivant:

db.collection('scores').find(function(err,docs){res.send(docs);}); 

Ou utilisez la fonction toArray pour être sûr de récupérer un tableau d'objets.

db.collection('scores').find().toArray(function(err, docs) { 
    console.dir(docs); 
    res.send(docs) 
} 
+0

Oui, merci pour votre réponse. La façon dont j'ai essayé de sauvegarder ma configuration de connexion db dans un fichier séparé était erronée. – codefire

+0

self.routes ['/ db'] = fonction (req, res) { \t var dbName = "/ nodejs"; \t var connexion_string = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" + process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" + process.env.OPENSHIFT_MONGODB_DB_HOST + ":" + process.env.OPENSHIFT_MONGODB_DB_PORT + dbName; \t var db = mongojs (chaîne de connexion); \t var b = db.collection («livres»); \t //db.b.find(function(err, docs) {// \t res.send (docs); // \t}); db.collection ('books'). Find (fonction (err, docs) { \t res.send (docs); \t \t}); \t}; – codefire

1

voici comment nous connecter à notre serveur MongoDB:

//app.js 
var databaseUrl = "mydb"; // "username:[email protected]/mydb" 
var collections = ["users"] 
var db = require("mongojs").connect(databaseUrl, collections); 



db.users.find({email: "[email protected]"}, function(err, users) { 
    if(err || !users) console.log("No female users found"); 
    else users.forEach(function(femaleUser) { 
    console.log(femaleUser); 
    }); 
}); 
0

En utilisant MongoClient.

//test is the database and students is the collection inside test. 
var MongoClient = require('mongodb').MongoClient; 
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) { 
    console.log("Successfully connected to MongoDB "); 
    var cursor = db.collection('students').find({}); 

    cursor.forEach(
     function(doc) { 
      console.log("JSON doc: "+doc); 
     }, 
     function(err) { 
      console.log("Error"); 
      return db.close(); 
     } 
    ); 

}); 
Questions connexes