2017-06-08 4 views
2

Ich versuchte es mit MLab-Datenbank verbinden, aber es funktioniert nicht, ging durch viele Stackoverflow-Antworten und versuchte alles, aber die Fehler sind immer noch da, bitte helfen.Ich kann meine nodejs-Anwendung nicht mit mLab-Datenbank verbinden

var express = require('express'); 
var mongojs = require('mongojs'); 
var mongodb = require('mongodb'); 
// var db = mongojs('contactlist',['contactlist']); 
var uri = 'mongodb://user:[email protected]####.mlab.com:13702/contactlist' 
mongodb.MongoClient.connect(uri, { server: { auto_reconnect: true } }, function (err, contactlist) { 

}); 

var db = mongodb.connect(uri); 
var app = express(); 
var bodyParser = require('body-parser'); 
app.use(express.static(__dirname + "/public")); 
app.use(bodyParser.json()); 
app.get('/contactlist', function(req, res){ 
    console.log("I received a GET request"); 
    db.contactlist.find(function(err, docs){ 
     console.log(docs); 
     res.json(docs); 
    }); 
}); 



app.post('/contactlist', function(req, res) { 
    console.log(req.body); 
    db.contactlist.insert(req.body,function(err,doc) { 
     res.json(doc); 
    }); 
}); 
app.listen(process.env.PORT ||3000, function(){ 
    console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env); 
}); 

Ich erhalte diese Fehler, nachdem ich die Daten der Browser versuchen, Einfügen, es ist nicht einmal die Daten aus der Datenbank angezeigt werden. Fehler:

TypeError: Cannot read property 'find' of undefined 
     at D:\contactlistapp\server.js:17:16 
     at Layer.handle [as handle_request] (D:\contactlistapp\node_modules\express\lib\router\layer.js:95:5) 
     at next (D:\contactlistapp\node_modules\express\lib\router\route.js:137:13) 
     at Route.dispatch (D:\contactlistapp\node_modules\express\lib\router\route.js:112:3) 
     at Layer.handle [as handle_request] (D:\contactlistapp\node_modules\express\lib\router\layer.js:95:5) 
     at D:\contactlistapp\node_modules\express\lib\router\index.js:281:22 
     at Function.process_params (D:\contactlistapp\node_modules\express\lib\router\index.js:335:12) 
     at next (D:\contactlistapp\node_modules\express\lib\router\index.js:275:10) 
     at jsonParser (D:\contactlistapp\node_modules\body-parser\lib\types\json.js:103:7) 
     at Layer.handle [as handle_request] (D:\contactlistapp\node_modules\express\lib\router\layer.js:95:5) 
    { name: 'kkm', email: 'kmk' } 
    TypeError: Cannot read property 'insert' of undefined 
     at D:\contactlistapp\server.js:27:16 
     at Layer.handle [as handle_request] (D:\contactlistapp\node_modules\express\lib\router\layer.js:95:5) 
     at next 
+0

Versuchen Sie den Code nach dieser Anleitung zu ändern: http://www.guru99.com/node-js-mongodb.html –

+0

Ich glaube, Ihr Problem [in find() legt hier] (https: //docs.mongodb.com/manual/reference/method/db.collection.find/) überprüfe, wie dieser Teil umgeschrieben wird. Gleiches gilt für insert(). –

+0

@VedranMaricevic Danke, ich habe versucht, immer noch die Fehler bestehen. –

Antwort

1

db.[collection_name] Syntax (. Dh Kollektionsnamen auf Eigentum) in MongoShell unterstützt, aber in node-Umgebung müssen Sie folgende Syntax verwenden: db.collection("collection_name").find(). Dasselbe mit Einlage.

Beachten Sie auch, dass die Verbindungsfunktion von MongoClient asynchron ist. Sie müssen einen Verweis auf die Datenbank aus dem von Ihnen angegebenen Rückruf abrufen.

mongodb.MongoClient.connect(uri, { server: { auto_reconnect: true } }, function (err, contactlist) { 
    db = contactlist; 
}); 
+0

die Änderungen vorgenommen, noch diese Fehler bekommen, 'D: \ contactlistapp \ node_modules \ mongodb \ lib \ mongo_client.js: 446 Wurf irren ^ Reference : Kontaktliste ist nicht definiert bei D: \ contactlistapp \ server.js: 8: 8 bei connectCallback (D: \ contactlistapp \ node_modules \ mongodb \ lib \ mongo_client.js: 505: 5) bei D: \ contactlistapp \ node_modules \ mongodb \ lib \ mongo_client.js: 443: 13 bei _combinedTickCallback (internal/process/next_tick.js: 73: 7) bei process._tickCallback (internal/process/next_tick.js: 104: 9) ' –

Verwandte Themen