没有连接事件被发射 - Mongoose 4.7.1&表达

时间:2017-08-18 08:20:14

标签: javascript node.js mongodb express mongoose

我遇到通过Mongoose将我的快递应用程序连接到MongoDB的问题。没有复杂的设置,它相当基本:

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/homeApp');

var db = mongoose.connection;

db.on("connecting", function(){
    console.log("Connecting to DB...");
});

db.on('connected', function(){
    console.log('Connected to db');
});

db.on('error', function(error){
    console.log('Error');
});

够简单吧?但这些事件都没有被解雇。 Mongo运行正常,它在默认端口上。我也尝试将localhost更改为127.0.0.1并检查了我的etc/hosts文件的内容,一切似乎都没问题。如果我将URI字符串修改为:

'mongoldb://lclhost/homeApp'

我收到一条错误,说它无法连接,这是预期的,因此似乎正在建立/尝试连接但没有发生任何事情。

我已将db.Db的内容记录到控制台并注意到此connected: false,这表示它甚至没有尝试连接?

有什么想法吗?这是在macOS Sierra 10.12.5上运行的Mongoose 4.7.1。

提前致谢!

2 个答案:

答案 0 :(得分:1)

想通了!我尝试使用没有mongoose的mongodb客户端,一切都按预期工作,所以我知道连接是正常的,并留下了猫鼬的责任。

原来我没有按照我的想法使用4.7.1,而且只运行npm install mongoose --save实际上安装了版本3.x,根据Mongoose文档,它与最新版本的MongoDB不兼容。 http://mongoosejs.com/docs/compatibility.html

将我的package.json文件中的版本号升级到4.7.1修复了该问题。

答案 1 :(得分:0)

mongoose.connect方法接受回调,您可以使用它来检查连接:

mongoose.connect(uri, options, function(error) {
  // Check error in initial connection.
  if (error) {
    console.log(error);
  } else {
    console.log('connected ok');
  }
});

我认为您的连接正在创建,但您的db.on事件未被触发。