我有管理页面,编辑了一些模型。当我得到模型时,我将其转换为JSON并获得如下内容:
{
"__v": 0,
"_id": "52d919c7ec31cffc17477767",
"description": "Hello, teached",
"points": 1300,
}
这是我的玉石模板
form(role='form', method='post', action='/admin/item')
.form-group
textarea.form-control#result(rows='20', name='result') !{JSON.stringify(item, null, '\t')}
input.btn.btn-primary(type='submit', value='Send')
这是我的路由器代码
app.post('/admin/item', function (req, res) {
result = JSON.parse(req.body.result);
Item.update({_id: result._id}, result, function (err, result) {
if (err) {
res.send('error');
} else {
res.send(result, 200);
}
});
});
我总是收到错误,但是当我手动更新每个字段时,就像这样:
result = JSON.parse(req.body.result);
Item.update({_id: result._id}, {description: result.description, ...
它神奇地更新。我做错了什么?
答案 0 :(得分:3)
您需要从_id
对象中删除result
字段,否则Mongoose会假设您尝试从字符串而不是_id
转换ObjectID
字段。您还希望这样做,因为我假设每次更新文档时都更新_id
可能不是您想要的行为。
编辑:
此外,如果您使用Express的bodyParser
中间件,则无需自行解析JSON。 req.body
应该从POST请求的主体返回一个已解析的对象文字。话虽如此,将路由器更改为这样可以使工作正常:
app.post('/admin/item', function (req, res, next) {
var id = req.body.result._id;
delete req.body.result._id;
Item.update({_id: id}, req.body.result, function (err, numAffected) {
// Do something after update here
});
});