express-expose
express-expose copied to clipboard
function string
Hi TJ express-expose define the following function to create a string representation of objects
function string(obj) {
if ('function' == typeof obj) {
return obj.toString();
} else if (obj instanceof Date) {
return 'new Date("' + obj + '")';
} else if (Array.isArray(obj)) {
return '[' + obj.map(string).join(', ') + ']';
} else if ('[object Object]' == Object.prototype.toString.call(obj)) {
return '{' + Object.keys(obj).map(function(key){
return '"' + key + '":' + string(obj[key]);
}).join(', ') + '}';
} else {
return JSON.stringify(obj);
}
}
This works well except when used with mongo ObjectId object, where I end up with this serialisation
window.someId = window.someId || {};
someId["_bsontype"] = "ObjectID";
someId["id"] = "OÏ\u001a¾Å°U\u0000\u00000";
for my use case, I could replace the Object.prototype.toString statement with obj.toString (toString return string representation on ObjectId)
...
// else if ('[object Object]' == Object.prototype.toString.call(obj)) {
else if ('[object Object]' == obj.toString.call(obj)) {
Could the function be exposed somehow so I can inject my customisations ? Or do you see a better solution for this kind of issues ?
we should probably add regular toJSON support, that could be used
That sounds like a good idea in my case i ended up to write something like that
res.expose("me = " + (JSON.stringify(user.toJSON())) + ";");