【问题标题】:Can't connect my nodejs application with mLab database无法将我的 nodejs 应用程序与 mLab 数据库连接
【发布时间】:2017-06-08 21:32:53
【问题描述】:

我尝试将它与 mlab 数据库连接,但它无法正常工作,查看了很多 stackoverflow 答案并尝试了所有方法,但错误仍然存​​在,请帮助。

var express = require('express');
var mongojs = require('mongojs');
var mongodb = require('mongodb');
// var db = mongojs('contactlist',['contactlist']);
var uri = 'mongodb://user:pass@####.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);
});

我尝试在浏览器上插入数据后出现这些错误,它甚至没有显示数据库中的数据。 错误:

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 

【问题讨论】:

  • 尝试根据这些说明修改您的代码:guru99.com/node-js-mongodb.html
  • 我相信你的问题lays here, in find()检查如何重写那部分。同样,对于 insert()。
  • @VedranMaricevic 谢谢,我试过了,错误仍然存​​在。
  • @FooBar 我认为那里没有任何错误。 :|
  • :|那我就帮不上忙了,希望有人知道更多

标签: javascript node.js mongodb express mlab


【解决方案1】:

db.[collection_name] 语法(即属性上的集合名称)在 MongoShell 中受支持,但在节点环境中,您必须使用以下语法: db.collection("collection_name").find()。插入也是一样。

还要注意 MongoClient 的连接函数是异步的。您必须从您指定的回调中获取对数据库的引用。

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

【讨论】:

  • 进行了更改,仍然出现这些错误,D:\contactlistapp\node_modules\mongodb\lib\mongo_client.js:446 throw err ^ ReferenceError: contactlist is not defined at D:\contactlistapp\server.js:8:8 at connectCallback (D:\contactlistapp\node_modules\mongodb\lib\mongo_client.js:505:5) at D:\contactlistapp\node_modules\mongodb\lib\mongo_client.js:443:13 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 2011-07-27
  • 2019-04-29
相关资源
最近更新 更多