2017-02-16 50 views
2

我在NodeJS中调用一个函数,接收JSON对象intent,尝试添加一个新属性“测试”并返回该对象。问题是新的属性“测试”永远不会显示在返回的对象中。但是,现有的“已处理”的值是正确更改的。有任何想法吗?在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

[有没有这样的事情作为一个 “JSON对象”(HTTP:// benalman。 com/news/2010/03/theres-no-such-thing-as-a-json /) – Phil

+0

究竟**是什么**意图。它碰巧有'toJSON'方法吗? – Phil

+0

试试这个意图[“tested”] =“DONE”而不是intent.tested =“DONE” –

回答

2

你的意图对象可以是一些自定义的对象(通过像猫鼬一些库返回)。大多数时候你不能直接修改这些对象。您必须将它们更改为纯javascript对象。这些库为此提供了方法(如toObject或toJSON)。此外,如果它是一个像地图之类的集合或类似的东西,它也有toObject方法。

如果对象是一个地图试试这个:

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)); 
}