我遇到通过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。
提前致谢!
答案 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事件未被触发。