我正在尝试在成功更新时向响应添加状态,但我无法将status属性添加到表单的json对象。这是我的代码
apiRouter.post('/forms/update', function(req, res){
if(req.body.id !== 'undefined' && req.body.id){
var condition = {'_id':req.body.id};
Form.findOneAndUpdate(condition, req.body, {upsert:true}, function(err, form){
if (err) return res.send(500, { error: err });
var objForm = form;
objForm.status = "saved successfully";
return res.send(objForm);
});
}else{
res.send("Requires form id");
}
});
这是我得到的回复,通知状态缺失
{
"_id": "5580ab2045d6866f0e95da5f",
"test": "myname",
"data": "{\"name\":3321112,\"sdfsd\"344}",
"__v": 0,
"id": "5580ab2045d6866f0e95da5f"
}
我不确定我错过了什么。
答案 0 :(得分:9)
尝试.toObject()
表单:
Form.findOneAndUpdate(condition, req.body, {upsert:true}, function(err, form){
if (err) return res.send(500, { error: err });
var objForm = form.toObject();
objForm.status = "saved successfully";
return res.send(objForm);
});
答案 1 :(得分:6)
Mongoose查询结果不可扩展(对象被冻结或密封),因此您无法添加更多属性。为避免这种情况,您需要创建对象的副本并对其进行操作:
var objectForm = Object.create(form);
objectForm.status = 'ok';
更新:我的回答很旧并且工作正常,但我会使用ES6语法
const objectForm = Object.create({}, form, { status: 'ok' });
使用扩展运算符的另一种方法:
const objectForm = { ...form, status: 'ok' }
答案 2 :(得分:0)
尝试将res.send(objForm)
更改为res.send(JSON.stringify(objForm))
。我怀疑Mongoose模型有一个自定义的toJson函数,所以当你返回它时,它会以某种方式转换响应。
希望以上有所帮助。
答案 3 :(得分:0)
创建一个空对象并向其添加所有属性:
const data = {};
data._id = yourObject._id; // etc
data.status = "whatever";
return res.send(data);
答案 4 :(得分:-1)
只需创建一个容器。
array = {};
Model.findOneAndUpdate(condition, function(err, docs){
array = docs;
array[0].someField ="Other";
});