AngularJS正在从我的架构对象中剥离密钥

时间:2015-04-18 16:20:55

标签: angularjs node.js mongoose

编辑:这不是服务器端问题。请仔细阅读问题。

我正在使用Mongoose,Express,Node和Angular构建解决方案。我正在尝试发送我的Mongoose模式文件客户端进行解析。我已成功获取控制器脚本(客户端)中的对象中的数据,结构如下:

{
    href: {type: String},
    text: {type: String, trim:true},
    dropdown: {type: Boolean},
    dropdownList: {type: Array}
}

这是通过$scope.$apply传递的(因为它正在回调中收到),并且在HTML中收到它,如下所示:

{
    href: {},
    text: {trim:true},
    dropdown: {},
    dropdownList: {}
}

拥有数据类型对我的实现非常重要。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果您不关心猴子修补功能对象,您可以这样做。

在res.json代码在服务器或客户端浏览器中运行之前的任何地方添加以下内容。

Function.prototype.toJSON = function() { return this.name; }

使用节点

进行测试
# node

> var schema = {
...     href: {type: String},
...     text: {type: String, trim:true},
...     dropdown: {type: Boolean},
...     dropdownList: {type: Array}
... }
undefined

> schema
{ href: { type: [Function: String] },
  text: { type: [Function: String], trim: true },
  dropdown: { type: [Function: Boolean] },
  dropdownList: { type: [Function: Array] } }

> JSON.stringify(schema)
'{"href":{},"text":{"trim":true},"dropdown":{},"dropdownList":{}}'

> Function.prototype.toJSON = function() { return this.name; }
[Function]

> JSON.stringify(schema)
'{"href":{"type":"String"},"text":{"type":"String","trim":true},"dropdown":{"type":"Boolean"},"dropdownList":{"type":"Array"}}'
> 

答案 1 :(得分:0)

在您的对象中,您尝试分配StringArrayBoolean等内容,并注意这些值不是字符串值这些只是关键字。如果你有数字,你可以这样做,所以你需要将这些值用作string values

{
    href: {type: 'String'},
    text: {type: 'String', trim:true},
    dropdown: {type: 'Boolean'},
    dropdownList: {type: 'Array'}
};

这是一个demo