node.js上的angular.toJSON()函数/方法实现

时间:2017-03-29 07:26:48

标签: javascript angularjs node.js

是否有可能以某种方式在node.js服务器上实现angular.toJSON函数/方法。我只需要使用angular.toJSON()。

在将数据写入mongo数据库时,由于与'$'的哈希键错误,我得到了它。

或许有一个函数可以取代angular.toJSON ...

谢谢!

修改

以下是问题和解决方案的完整说明:

Angular在ng-repeat中提供$ scope对象“&& hashKey”,以便它可以跟踪任何更改,如果发生更改,则更新DOM。当您将对象发送到节点服务器时,它仍然在其自身内部具有hashKey元素,并且它对节点中的大多数事物没有影响。但是当通过mongoose将$$ hashKey保存到mongo数据库时,它会抛出一个错误,即对象中的key和element的键不应该以'$'开头。

所以我们需要的是删除哈希键。有一个angular.toJSON()方法可以自动从对象中删除$$ hashKey,但它只能在客户端进行操作。

在node.js ste2425上使用带有replacer选项的JSON.strigify建议实现相同的方法。在最后,我创建了一个可以在node.js上实现的函数,该函数适用于我的问题(不知道它是否是最佳解决方案):

function angularToJSON(object) {
    replacer = (key, val) => key.startsWith('$$') ? undefined : val;
    var objectReplaced = JSON.stringify(object, replacer);
    return JSON.parse(objectReplaced);
}

1 个答案:

答案 0 :(得分:2)

这并不能复制角斗toJSON,因为我并不完全确定它的内部运作。

但是,如果要在序列化时过滤/清理对象,可以使用标准JSON.stringify

可用的替换方法
const obj = {
    one: 10,
    $$two: 'ignore',
    three: {
      $$four: 'troll',
      five: 50
    },
    array: [{
        $$tt: 10,
        bob: 5
      },
      5
    ]
  },
  replacer = (key, val) => key.startsWith('$$') ? undefined : val;

console.log(JSON.stringify(obj, replacer));

// {"one":10,"three":{"five":50},"array":[{"bob":5},5]}

请参阅fiddle

注意我确定在某些情况下我读过该密钥可能是undefined但是无法在MDN上找到它或者在小提琴中复制它,可以用于反序列化。仅供参考。