当保存时,Mongoosecallback从未达到

出于某种原因,尝试使用Mongoose将数据保存到MongoDB数据库时,从不会调用callback函数。 首先,我认为没有错误代码被触发,但是我testing了callback函数是否被input,而不是! 并没有保存在数据库中。 我甚至无法在其他MongoDB数据库存储的文件夹中看到一个名为client-db的文件(通过命令行) – 这可能是问题吗?

我已经尝试了类似问题的不同解决scheme,但目前为止还没有任何工作。 有没有人有任何想法我做错了? 我appeciate任何帮助!

以下是我的代码的相关部分:

客户db.js:

var mongoose = require('mongoose'); var db = mongoose.connect('mongodb://localhost/client-db', function(){ console.log("Client DB: connected"); // This is shown }); module.exports = mongoose; //module.exports = db; // Another problem was solved by this, but didn't work for me 

情节data.js:

 var db = require('client-db'); var plotDataSchema = db.Schema({ time: {type: Number, required: true}, value: {type: Number} }); var PlotData = db.model('PlotData', plotDataSchema); module.exports = PlotData; 

controller.js:

 var PlotData = require('plot-data'); //data is an object with time and value var plotData = new PlotData({ time: data.time, value: data.value }); plotData.save(function(err){ console.log('Entered callback'); // Never shown if(err){ console.log(err); // Never shown //return handleErrror(err); // Different things I tried when I thought the error handling was the problem - didn't change anything //return next(err); }else{ console.log('Plot data saved in client db'); // Never shown } }); 

如果你真的连接,那么看起来你有一个竞争状态正在进行数据库连接和保存操作。 将您的代码凝聚到单个文件并执行连接callback工作中的保存。

 var mongoose = require('mongoose'); var plotDataSchema = mongoose.Schema({ time: {type: Number, required: true}, value: {type: Number} }); var PlotData = mongoose.model('PlotData', plotDataSchema); var plotData = PlotData({ time: 1234, value: 5678 }); mongoose.connect('mongodb://localhost/client-db', function(err) { if (err) { console.log(err); return; } console.log("Client DB: connected"); // This is shown plotData.save(function(err, plot){ console.log(err, plot); // outputs // null { __v: 0, time: 1234, value: 5678, _id: 5526892bcffa7a0e973fb456 } }); }); 

还有一些有关mongoose的笔记:

  • 它有一个模型,模式和连接的内部全局caching(以及每个连接的caching),所以不需要这样做: module.exports = mongoose; 。 只需要mongoose,无论你需要它(节点也有它自己的caching,所以它只会出口已经存在的mongoose到请求的文件)。
  • 继续上面的观点,由于这个模型的内部caching,你不需要这样做: module.exports = PlotData 。 只需要mongoose,然后你可以做: var PlotData = mongoose.model('PlotData'); 从caching中检索模型。

所以你的文件看起来像这样:

客户db.js

 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/client-db', function(err){ if (err) { console.log(err); return; } console.log("Client DB: connected"); // This is shown }); 

情节data.js

 var mongoose = require('mongoose'); var plotDataSchema = mongoose.Schema({ time: {type: Number, required: true}, value: {type: Number} }); mongoose.model('PlotData', plotDataSchema); 

controller.js

 var mongoose = require('mongoose'); var PlotData = mongoose.model('PlotData'); // Notice schema is not specified var plotData = new PlotData({ time: data.time, value: data.value }); // NEED TO WAIT FOR CONNECTION BEFORE CALLING plotData.save(function(err, plot){ console.log(err, plot); });