Mongoose model.save()不会持久更新数据库

我正在开发一个mongoose / node.js / express应用程序。

在我的路线我使用快速'app.param()方法来获取我的模型实例到请求中 – 而不是在每个控制器操作中获取它。

我得到了showcreate在我的控制器工作的行动 – 但是我卡住实施update行动。

这里是我的相关控制器代码:

 // mymodel-controller.js var mongoose = require('mongoose') var MyModel = mongoose.model('MyModel'); var utils = require('../../lib/utils'); "use strict"; exports.update = function (req, res, next) { var mymodel = req.mymodel; mymodel.set(req.body); mymodel.slug = utils.convertToSlug(req.body.title); mymodel.save(function(err, doc) { if (!err) { console.log('update successful'); // here i see the correctly updated model in the console, however the db is not updated console.dir(doc); return res.redirect('/mymodels/' + mymodel.slug); } else { console.error('update error', err); return res.render('mymodels/edit', { title: 'Edit Model', model: mymodel, errors: err.errors }); } }); } 

奇怪的是,mongoose救成功,我没有得到任何错误。 我看到“更新成功”,并在控制台上打印了正确更新的模型,但未保留在数据库中。 我试着在更新和保存之前手动抓取模型,而不是使用app.param(..),但是我有同样的效果。 任何想法,我在这里失踪?

更新

这是我设置req.mymodel的代码 – 长路由文件的一部分。 在我的表演动作,例如我也使用req.mymodel来显示它,它迄今为止工作正常。

 /** * mymodel ROUTES */ app.param('mymodel', function(req, res, next, id){ MyModel.findOne({ 'slug': id }, function(err, mymodel) { if (err) { next(err); } else if (mymodel) { req.mymodel = mymodel; next(); } else { res.status(404).render('404', {title: "Not found", errorMessage: "The requested mymodel was not found."}); } }); }); app.get('/mymodels', mymodelsController.index); app.get('/mymodels/new', mymodelsController.new); app.post('/mymodels', mymodelsController.create); app.get('/mymodels/:mymodel', mymodelsController.show); app.get('/mymodels/:mymodel/edit', mymodelsController.edit); app.put('/mymodels/:mymodel', mymodelsController.update); // that's the one not working with the code above app.del('/mymodels/:mymodel', mymodelsController.destroy); 

UPDATE2

另一方面,这个代码在我的控制器中工作,并更新数据库(我宁愿使用instance.save()虽然)

 exports.update = function (req, res, next) { var mymodel = req.param('mymodel'); var query = { slug: mymodel }; var update = {}; update.title = req.param('title'); update.body = req.param('body'); update.points = req.param('points'); update.location = req.param('location'); update.slug = utils.convertToSlug(req.param('title')); MyModel.update(query, update, function (err, numAffected) { if (err) return next(err); if (0 === numAffected) { return next(new Error('no model to modify'), null); } res.redirect('/mymodels/' + update.slug); }); } 

问题确实是我在我的路线中设置req.param值的方式。

而不是在我的路线文件中这样做:

 app.param('mymodel', function(req, res, next, id){ MyModel.findOne({ 'slug': id }, function(err, mymodel) { if (err) { next(err); } else if (mymodel) { req.mymodel = mymodel; next(); } else { res.status(404).render('404', {title: "Not found", errorMessage: "The requested mymodel was not found."}); } }); }); 

我不得不声明每次加载实例的控制器操作

 app.param('mymodel', mymodelController.load); 

这在这个例子中看起来很像。