gpt4 book ai didi

json - Mongoose:通过 POST JSON 更新项目

转载 作者:太空宇宙 更新时间:2023-11-03 23:09:29 26 4
gpt4 key购买 nike

我有编辑一些模型的管理页面。当我获得模型时,我将其转换为 JSON 并得到如下内容:

{
"__v": 0,
"_id": "52d919c7ec31cffc17477767",
"description": "Hello, teached",
"points": 1300,
}

这是我的 Jade 模板

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, ...

它会神奇地更新。我做错了什么?

最佳答案

您需要从 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
});

});

关于json - Mongoose:通过 POST JSON 更新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com