在 Node/Mongoose/Express 中保持 DB 数据属性私有

Posted

技术标签:

【中文标题】在 Node/Mongoose/Express 中保持 DB 数据属性私有【英文标题】:Keeping DB data properties private in Node/Mongoose/Express 【发布时间】:2014-05-03 17:54:13 【问题描述】:

谁能告诉我将数据库数据保密并仅存储在 Web 服务器的数据库中的最佳做法?我正在运行一个 Node/MongoDB/Mongoose/Express 堆栈。

我在用户对象的数据库中有散列密码字段,显然不希望在发送用户数据时将其推送到客户端。

目前,我只是在将其交给 Express 之前手动删除用户对象的属性,但这似乎有点 hack-tastic。 Mongoose 或 Express 中是否有一种机制可以让您描述不应通过网络发送而仅在服务器内部使用的私有属性?

【问题讨论】:

我建议您覆盖toJSON,如此答案所示:***.com/a/11167490/95190 【参考方案1】:

当您从包含这些字段的数据库中检索对象时,它们就是对象的一部分。在将它们发送出去之前从对象中删除它们根本不是黑客行为。您唯一的选择是:

    在将其发送到响应之前删除属性 仅将您想要的字段映射到新对象,然后将其与响应一起发送出去 在处理面向公众的对象时使用排除这些属性的不同查询

【讨论】:

我不喜欢手动删除属性,因为随着代码复杂性的增加,我忘记在某处放置删除语句的可能性不断上升。我更希望 Mongoose 模式具有某种机制,例如从 Mongoose 导出对象时自动删除的私有对象属性。我意识到这将是微不足道的实现,但它似乎只是一个常见的用例,并且有点惊讶它还没有融入 Mongoose 或 Express。编辑 - 摸索手指 我经常创建自己的中间件来公开方便的方法。您可以将自己的函数添加到为您处理该问题的响应对象中。像 res.sendPrivate(obj);并在那里进行模型检查。我不知道有任何工具可以自动为您清理它。 好的,这很容易。我主要是在寻找确认,在我制作自己的中间件之前,我不仅仅是在重新发明***。谢谢! 发明或重新发明并在 github 上分享,如果你这样做了 :) 也许其他人也在寻找它!

以上是关于在 Node/Mongoose/Express 中保持 DB 数据属性私有的主要内容,如果未能解决你的问题,请参考以下文章

在 Maven 中,如何在版本中命名战争文件与在快照构建中不同

存储在 plist 中的数据在模拟器中有效,但在设备中无效

在 C 中声明 == 在 C++ 中定义? [复制]

初始化发生在哪里,在 init 方法中还是在实例声明中?

查询在数据库中花费了更多时间,尽管在连接条件中使用了索引列,那么我们可以在代码中做些啥来优化

在 Athena 中,如何在结构中的数组中查询结构的成员?