express-expose icon indicating copy to clipboard operation
express-expose copied to clipboard

function string

Open pgherveou opened this issue 13 years ago • 2 comments

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 ?

pgherveou avatar Aug 23 '12 14:08 pgherveou

we should probably add regular toJSON support, that could be used

tj avatar Sep 02 '12 19:09 tj

That sounds like a good idea in my case i ended up to write something like that

res.expose("me = " + (JSON.stringify(user.toJSON())) + ";");

pgherveou avatar Sep 02 '12 19:09 pgherveou