我正在尝试在MongoDB中更新实例化模型(“地方”-我知道它可以在其他路线中使用),并且花了一段时间尝试正确地做到这一点。我还试图重定向回查看“位置”的页面,以查看更新的属性。
节点v0.4.0,Express v1.0.7,Mongoose 1.10.0
架构:
var PlaceSchema = new Schema({ name :String , capital: String , continent: String });
控制器/路线:
app.put('/places/:name', function(req, res) { var name = req.body.name; var capital = req.body.capital; var continent = req.body.continent; Place.update({ name: name, capital: capital, continent: continent}, function(name) { res.redirect('/places/'+name) });
});
我尝试了多种方法,但似乎无法理解。 另外,我不是如何声明三个{name,capital和continent}变量来阻止进一步的操作吗?谢谢。一般调试帮助也将受到赞赏。Console.log(name)(在声明的正下方)不记录任何内容。
翡翠形式:
h1 Editing #{place.name} form(action='/places/'+place.name, method='POST') input(type='hidden', name='_method', value='PUT') p label(for='place_name') Name: p input(type='text', id='place_name', name='place[name]', value=place.name) p label(for='place_capital') Capital: p input(type='text', id='place_capital', name='place[capital]', value=place.capital) p label(for='place_continent') Continent: p textarea(type='text', id='place_continent', name='place[continent]')=place.continent p input(type="submit")
您必须在更新任何内容之前先找到文档:
Place.findById(req.params.id, function(err, p) { if (!p) return next(new Error('Could not load Document')); else { // do your updates here p.modified = new Date(); p.save(function(err) { if (err) console.log('error') else console.log('success') }); } });
使用与您相同的设置在生产代码中为我工作。您可以使用mongoose提供的任何其他find方法来代替findById。只要确保在更新文档之前先获取文档即可。