mongoose保存失败没有错误

正如标题所示,我在使用mongoose保存方法时遇到了问题,但是不会生成错误。

我实际上知道为什么它失败了,这是根据需要标记为userId字段,但没有提供…但我不知道为什么它不会抛出一个错误。 我已经穷尽了谷歌和stackoverflow看着类似的build议,没有运气,所以扔给任何人谁可以帮助我!

这是代码…

Model.js var mongoose = require('mongoose'); var TimeSchema = new mongoose.Schema({ client: String, matter: String, activity: String, tags: String, description: String, comments: [String], startTime: Date, startTimeUTC: Number, endTime: Date, endTimeUTC: Number, duration: Number, durationRnd: Number, durationUnits: Number, billable: Boolean, rate: Number, total: Number, user: String, userId: { type: mongoose.Schema.ObjectId, required: true } }, {safe: true}); mongoose.model("Time", TimeSchema); Controller.js exports.addTime = function (req, res) { console.log('Adding time: ' + JSON.stringify(req.body)); var time = new Time(req.body); time.save(function (err) { if (err) { res.send({'error' : err}); } res.send(time); }); } 

编辑 – 为了说明正在调用的callback,以下面的代码为例。

 exports.addTime = function (req, res) { console.log('Adding time: ' + JSON.stringify(req.body)); var time = new Time(req.body); console.log("time = " + time); // TODO user time.save(function (err) { if (err) { handleError(res, err); } console.log("ok"); Time.findById(time._id, function (err, found) { console.log("found = " + found); }); res.send(time); }); 

}

这里是控制台输出

 Adding time: {"description":"test","client":"","matter":"","activity":"","rate": "","startTime":"2013-11-30T19:58:43.000Z","startTimeUTC":"1385841523000","endTim e":"2013-11-30T19:58:45.000Z","endTimeUTC":"1385841525000","startLocale":"19:58" ,"startTimeLocale":"19:58:43","endLocale":"19:58","endTimeLocale":"19:58:45"} time = { description: 'test', client: '', matter: '', activity: '', rate: null, startTime: Sat Nov 30 2013 19:58:43 GMT+0000 (GMT Standard Time), startTimeUTC: 1385841523000, endTime: Sat Nov 30 2013 19:58:45 GMT+0000 (GMT Standard Time), endTimeUTC: 1385841525000, startTimeLocale: '19:58:43', endTimeLocale: '19:58:45', _id: 529a43750a366b6419000001, comments: [] } ok POST /api/times 200 14ms - 313b found = null 

问题解决了,感谢robertkelp。

这是我的修改后的代码,以防万一,如果有人帮助,但它似乎错误被抛出我只是没有正确处理。

 exports.addTime = function (req, res) { console.log('Adding time: ' + JSON.stringify(req.body)); var time = new Time(req.body); time.save(function (err) { if (err) { handleError(res, err); } else { res.send(time); } }); } 

天真地不连接到数据库是很有可能遇到这个错误的。 已经发生好几次了。 确保您的mongoose.connect()已经到位。

我的问题没有通过使用findOne解决,它是通过定义模型模式中更新的字段来解决的。 所以我的代码是这样的:

  User.findOne({email:data.userData.email}, function (err, user) { if (!err && user!=undefined){ console.log(user); var userDiscounts = user.discounts; for(var i=0;i<userDiscounts.length;i++){ if (userDiscounts[i]!=undefined && userDiscounts[i].code=="XXXXXX"){ userDiscounts[i].claimed = true; console.log('discount claimed'); } } user.discounts = userDiscounts; user.fbDiscountClaimed = true; user.save(function(err) { if (err) console.log(err); console.log('Saved Hashve-FB as claimed'); }); } }); } } 

但折扣和用户模式的架构缺lessuser.discountstypes的定义,所以我添加了以下内容:

  var UserSchema = new Schema({ name: String, email: { type: String, lowercase: true }, role: { type: String, default: 'user' }, hashedPassword: String, provider: String, salt: String, messages:[], discounts:[{ "name": String, "description": String, "created_at": String, "updated_at": String, "code": String, "claimed": Boolean } ], facebook: {}, fbDiscountClaimed:false, twitter: {}, google: {}, github: {} }); 
 UserSchema.pre('save',function(next){ var currentDate=new Date(); this.updatedAt=currentDate; if(!this.createdAt){ this.createdAt=currentDate; }; next(); }); 

当我使用.pre('save',fn)创build时间的时候,我忘了next() ,导致数据存储没有错误地失败,希望能帮到别人!

我遇到了savecallback被调用的情况,但文档没有改变。 我还没有find根本原因(可能是某种确认的事情),但是这个问题与我所做的一些改变有关。 所以我只是一个接一个地尝试了这些变化,直到find罪魁祸首。

(如果你想知道更多这种现象,请随意编辑这个答案)