【大雾】mongoose中createConnection和connect的大坑!

遭遇此坑真是刻骨铭心。。。。。几乎找了半天的错误。。。查了API,看了好多人的代码。。。最后。。。终于发现是哪里有问题。。。

其实不记得这种写法怎么来的了。。。。= = 因为刚开始看代码的时候会点开很多教程看。。可能默默就错了。。。。

错误:

<span style="font-size:14px;color:#333333;">var db = mongoose.createConnection(setting.host, setting.db);
db.once('open',function(){
	console.log('success');
	var schema = mongoose.Schema({
		title:String
	});
	var model = mongoose.model('all',schema);

	var kit = new model({title: 'xxx'});

	kit.save(function(err, date, num){
		console.log('!');
		if(err) console.log(err);
		else if(date) console.log(date);
		else console.log(num);
	})

})</span>

现象:可以显示success,但是用save的时候却没有反应。。因为model是错的。。具体反应应该是要追溯到源码的。。。

正确:

在多方求问之后。。。(期间整个人是混乱的。。),有人甩给了我一个API的网址。。我说我一直在看API啊。。然后还是点进去看了下。。上面是connect的正确使用方法。。。于是我想。。这我知道啊!但是我的写法为什么错呢!。。然后灵光乍现!可能本来就不能这么用啊!虽然可以success,但是save的时候回出错啊!然后几分钟这个问题就解决了。。

<span style="font-size:14px;color:#333333;">var db = mongoose.createConnection(setting.host, setting.db);
db.once('open',function(){
	console.log('success');
	var schema = mongoose.Schema({
		title:String
	});
	var model = db.model('all',schema);

	var kit = new model({title: 'Fuck'});


	kit.save(function(err, date, num){
		console.log('!');
		if(err) console.log(err);
		else if(date) console.log(date);
		else console.log(num);
	})

})</span>

或者是:

<span style="font-size:14px;color:#333333;">mongoose.connect('mongodb://localhost/natsu');
var db = mongoose.connection;
db.once('open',function(){
	console.log('success');
	var schema = mongoose.Schema({
		title:String
	});
	var model = mongoose.model('all',schema);

	var kit = new model({title: 'Fuck'});


	kit.save(function(err, date, num){
		console.log('!');
		if(err) console.log(err);
		else if(date) console.log(date);
		else console.log(num);
	})

})</span>

其实改变就是用create的时候,model的创建不能是mongoose,而应该是db,但是用connect的时候,就要用mongoose.....

文档中是说createConnection更适用于连接多个数据库的情况,connect是用mongoose的default connect......

这方面文档上面没有查到是怎么回事。。。TAT。。我整个人是懵逼的。。。。


其实最有感触的是debug的能力。。还是不够啊。。。。不能明确的描述问题和定位错误。刚开始发现错的时候,我认为是create和connect返回的对象不一样,确实应该是不一样的,查了文档之后朦朦胧胧的。。。(英语太差TAT)


在createConnection下有这么一段话:『This connection object can then be used for creating and retrieving models that are scoped only to this specific connection.』

之前没有发现。。但是现在看起来。。是表示创建model的时候应该要用这个返回的对象微笑


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值