无法向json对象添加属性

Aut*_*cus 7 mongoose node.js express

我试图在成功更新时向响应添加状态,但我无法将状态属性添加到表单的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");
    }

});
Run Code Online (Sandbox Code Playgroud)

这是我得到的回复,通知状态缺失

{
    "_id": "5580ab2045d6866f0e95da5f",
    "test": "myname",
    "data": "{\"name\":3321112,\"sdfsd\"344}",
    "__v": 0,
    "id": "5580ab2045d6866f0e95da5f"
}
Run Code Online (Sandbox Code Playgroud)

我不确定我错过了什么.

DTi*_*ing 10

尝试.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);

});
Run Code Online (Sandbox Code Playgroud)


Jos*_*ato 8

Mongoose查询结果不可扩展(对象被冻结或密封),因此您无法添加更多属性.为避免这种情况,您需要创建对象的副本并对其进行操作:

var objectForm = Object.create(form);
objectForm.status = 'ok';
Run Code Online (Sandbox Code Playgroud)

更新:我的答案是旧的,工作正常,但我将使用ES6语法相同

const objectForm = Object.create({}, form, { status: 'ok' });

使用spread运算符的另一种方法

const objectForm = { ...form, status: 'ok' }