Mongoose:通过 POST JSON 更新项目
Posted
技术标签:
【中文标题】Mongoose:通过 POST JSON 更新项目【英文标题】:Mongoose: updating item through POST JSON 【发布时间】:2014-02-09 20:16:19 【问题描述】:我有编辑一些模型的管理页面。当我得到模型时,我将其转换为 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, ...
它神奇地更新。我做错了什么?
【问题讨论】:
【参考方案1】:您需要从result
对象中删除_id
字段,否则Mongoose 会假定您尝试从字符串而不是ObjectID
转换_id
字段。您还需要这样做,因为我假设每次更新文档时都更新 _id
可能不是您想要的行为。
编辑:
另外,如果您将 bodyParser
中间件与 Express 一起使用,则无需自己解析 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
);
);
【讨论】:
如何通过'result'变量做到这一点? 简称delete result._id
。现在一切正常!
是的——我也将它添加到我的编辑中。很高兴为您提供帮助!
所以mongoose不提供调试系统?不幸的是它没有像mysql那样显示mongodb错误。
确实如此——#update()
回调中的 err
参数应该包含您要查找的错误。不幸的是,您使用通用字符串“error”覆盖,而不是将err
对象记录到控制台或通过req.send(err)
发送回客户端以上是关于Mongoose:通过 POST JSON 更新项目的主要内容,如果未能解决你的问题,请参考以下文章
使用node js mongoose保存后如何返回json数据
当我运行 POST 请求时,为啥它不返回我的 Mongoose 模式定义中定义的 JSON?
mongoose post.save 在heroku上失败,在本地主机上工作