2016-07-18 9 views
1

Ich möchte auf die Remote-Mongodb-Daten über Knoten zugreifen. Geschrieben habe folgende in meinem app.js:Zugriff remote mongodb von Knoten

var mongo = require('mongodb'); 
var MongoClient = require('mongodb').MongoClient; 
var db = MongoClient.connect("mongodb://remote_url:27017/databasetest"); 
//db name is : databasetest 

app.use(function(req,res,next){ 
    req.db = db; 
    next(); 
}); 

Es folgt die api geschrieben, um eine Sammlung für den Zugriff auf von der db:

router.get('/get', function(req, res, next) { 
var db = req.db; 
var collection = db.get('test'); 
collection.find({},function(e,docs){ 
    res.json(docs); 
}); 
}); 

ich die folgenden Störung erhalten, während die API zugreifen:

db.get ist keine Funktion

mir jemand konntefür die gleiche

helfen
+0

finden, haben Sie eine einzelne Server-Einheit haben oder haben Sie eine Einheit mit Schiedsrichtern die Haupteinheit zu unterstützen. Bitte geben Sie uns auch realistische Informationen. –

Antwort

1

Die Mongo DB-Verbindungszeichenfolge dieses Format hat, Sie haben keine Benutzernamen und Passwort

mongodb://<user>:<password>@<url>:<port>/<database> 

Für Testverbindung, ist vielleicht einfach mit einem Testkonto in mlab.com zu spielen, ist es kostenlos ein nur zwei nehmen Protokoll.

1.First Einstufentest die Verbindung

var MongoClient = require('mongodb').MongoClient;

// Connect to the db 
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) { 
    if(!err) { 
    console.log("We are connected"); 
    } 
}); 

// Wenn Sie dies getestet haben, ersetzen

console.log ("Wir verbunden sind");

für

db.collection('test').find(<your query>) 
+0

Habe das auch versucht..Add ** Benutzer: Passwort ** in die URL .. aber immer noch den gleichen Fehler. –

2

Ich gehe davon aus Sie die aktuelle Version des node.js MongoDB-Treiber verwenden (derzeit in der Version 2.2.4).

Ein Problem, das sofort in den Sinn kommt, ist diese Zeile im Code:

var db = MongoClient.connect("mongodb://remote_url:27017/databasetest"); 

Die MongoClient.connect() Funktion erfordert einen Rückruf Parameter, sonst wird es ein Versprechen zurück. Ihr nachfolgender Code behandelt die Variable db jedoch nicht als ein Versprechen.

Außerdem versuchen Sie, die db Variable von (und zu) dem req Objekt zu erhalten (und festzulegen). Dieses req-Objekt enthält die HTTP-Anforderung und verfügt über Eigenschaften für die Anfragestrings, Parameter, Textkörper, HTTP-Header und so weiter. Dies ist die Ursache des Fehlers, den Sie sehen.

Dies ist die minimale Arbeitsbeispiel, das ich Express bekommen verwendet, kann ein Äquivalent zu dem Befehl db.test.find().toArray() in der mongo Shell zur Verfügung zu stellen:

var MongoClient = require('mongodb').MongoClient 
var assert = require('assert') 
var express = require('express') 
var app = express() 

var db = null 
MongoClient.connect('mongodb://localhost:27017/test', function(err,database) { 
    assert.equal(err,null) 
    db = database 
}) 

app.get('/', function(req,res) { 
    db.collection('test').find({}).toArray(function(err,doc) { 
     assert.equal(err,null) 
     res.send(JSON.stringify(doc)) 
    }) 
}) 

app.listen(3000, function() { 
    console.log('Listening on port 3000') 
}) 

Beachten Sie, dass in dem obigen Beispiel, ich bin db eine globale Verwendung Variable zum Speichern der MongoDB-Datenbankverbindung, die von erstellt wurde. Fühlen Sie sich frei, mit Promises zu experimentieren, wenn es sich für Sie natürlicher anfühlt.

Weitere Details der MongoClient Klasse in Bezug auf können Viel hängt auch auf der Fernbedienung mongodb Server in http://mongodb.github.io/node-mongodb-native/2.1/api/MongoClient.html