2017-02-16 20 views
2

NodeJSで関数を呼び出し、JSONオブジェクトintentを受け取り、 "tested"という新しい属性を追加しようとしましたが、そのオブジェクトを返します。問題は、返されたオブジェクトに新しい属性 "tested"が表示されないことです。ただし、既存の「処理済み」の値は正しく変更されます。何か案は?NodeJSのJSONオブジェクトに新しい属性を追加する

function process_first(req, res, next) { 
    Intent.getFirstUnprocessed() 
    .then(intent => { 
     intent.tested = "DONE"; 
     intent.processed = true; 
     res.json(intent); 
     }) 
    .catch(e => next(e)); 
} 

intent最初にこの値があります。

{"processed":false,"payload":"hello","createdAt":"2017-02-16T05:07:19.596Z"} 

をし、それが返されます。

{"processed":true,"payload":"hello","createdAt":"2017-02-16T05:07:19.596Z"} 
+0

ある場合(HTTP [ "JSONオブジェクト" のようなものはありません]。 com/news/2010/03/theres-no-such-as-a-json /) – Phil

+0

**正確には**意図です。 'toJSON'メソッドがあるのでしょうか? – Phil

+0

このテントを試してください["tested"] = "DONE"ではなくintent.tested = "DONE" –

答えて

2

あなたの目的のオブジェクトが(マングースのようないくつかのライブラリーから返された)いくつかのカスタムオブジェクトにすることができます。ほとんどの場合、これらのオブジェクトを直接変更することはできません。それらをプレーンなjavascriptオブジェクトに変更する必要があります。これらのライブラリは、この目的のためのメソッド(ObjectやtoJSONなど)を提供します。また、マップなどのコレクションの場合は、toObjectメソッドもあります。

オブジェクトがマップでこのお試しの場合:// benalman:

function process_first(req, res, next) { 
    Intent.getFirstUnprocessed() 
    .then(intent => { 
     var intenObject = intent.toObject(); 
     intenObject.tested = "DONE"; 
     intenObject.processed = true; 
     res.json(intenObject); 
     }) 
    .catch(e => next(e)); 
} 

を、それはJSON文字列

function process_first(req, res, next) { 
    Intent.getFirstUnprocessed() 
    .then(intent => { 
     var intenObject = JSON.parse(intent); 
     intenObject.tested = "DONE"; 
     intenObject.processed = true; 
     res.json(intenObject); 
     }) 
    .catch(e => next(e)); 
} 
関連する問題