我正在编写一个MEAN应用程序,使用Mongoose与MongoDB和Restangular进行通信以与Express通信。我的Mongoose模型定义目前存在于服务器目录中,因为它们适用于Mongoose。在Angular方面,我只是操纵原始JSON并让Restangular / Mongoose整理细节。
由于各种原因,其中大多数是不言而喻的,我想直接停止使用JSON并开始使用模型类。一个主要原因是我发现需要辅助函数,服务器和客户端都可以从中受益。
下意识的解决方案是创建服务器端的任何模型的前端类等价物。这导致严重的代码重复。
更聪明的(?)想法是将模型暴露给服务器和客户端。首先,我不确定安全隐患。其次,正如模型目前所说,它不是Angular友好的。我的模型设计看起来非常像this SO answer。
我是否可以通过Angular和Mongoose制作一套可以使用的类?
编辑:为了澄清当前的设计并澄清我想去的地方,请考虑以下代码段。数据库数据 - 比如[{ u: "LON" }, { u: "PAR" }]
- 绑定到d3选择,并通过从现有字典和属性u
导出X / Y坐标来绘制圆。
var centroids = { "lon": [100, 200], "par": [43, 139], "stp": [12, 121] };
svg.selectAll('circle')
.data(dbData)
.enter()
.append('circle')
.attr('cx', function(d) { return centroids[d.u.toLowerCase()][0]; })
.attr('cy', function(d) { return centroids[d.u.toLowerCase()][1]; })
.attr('fill', 'red')
.attr('r', 20);
有效。但是,如果我使用辅助方法充实了一个类呢?
var centroids = { "lon": [100, 200], "par": [43, 139], "stp": [12, 121] };
svg.selectAll('circle')
.data(dbData)
.enter()
.append('circle')
.attr('cx', function(d) { return d.getXCoordinate(centroids); })
.attr('cy', function(d) { return d.getYCoordinate(centroids); })
.attr('fill', d.ageIsDivisbleBy6() ? 'red' : 'purple')
.attr('r', 20);
更具可读性。希望这能澄清我的目标:我可以编写Mongoose使用的模型的客户端版本,但如果可以的话,我宁愿拥有Mongoose,客户端也可以在同一组模型上运行。