Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to add properties to js object

I am returning a Mongoose document and wish to add some meta data to it before I send it off. I am however unable to add any properties and I am not sure why. I have checked that it is extensible with Object.isExtensible(doc) and it is.

Item.findById(req.params.id).exec(function(err, doc) {    doc.blah = 'hello';    console.log(doc); // No trace of 'blah'. I can change/delete existing props however }) 

What could be issue?

like image 428
cyberwombat Avatar asked Sep 01 '13 01:09

cyberwombat


People also ask

Can't assign to property not an object?

The JavaScript strict mode exception "can't assign to property" occurs when attempting to create a property on primitive value such as a symbol, a string, a number or a boolean. Primitive values cannot hold any property.

Can not add property object is not extensible?

defineProperty() throws when adding a new property to a non-extensible object. To fix this error, you will either need to remove the call to Object. preventExtensions() entirely, or move it to a position so that the property is added earlier and only later the object is marked as non-extensible.

Can properties be assigned to JavaScript objects?

The same way, JavaScript objects can have properties, which define their characteristics.


1 Answers

Ah.. My object is a Mongoose document which doesn't allow adding properties. The solution is to either convert the returned document to a plain object or to call lean() in the query.

Item.findById(req.params.id).exec(function(err, doc) {   var obj = doc.toObject();   ... });  Item.findById(req.params.id).lean().exec(function(err, doc) {         ... }); 
like image 104
cyberwombat Avatar answered Sep 28 '22 13:09

cyberwombat