node.js - Mongoose Materialized Path 和 Mongoose Restify 可以一起使用吗?
问题描述
我已经在 Mongoose 中实现了递归树结构的模式/模型。今天,递归树结构使用一组子节点,这些子节点是对同一模式的引用。我还为树上的基本 CRUD 方法构建了一些 REST API。
我现在想通过使用两个独立设计的包来重构我的实现,以更专业的方式完成我需要的工作:
mongoose-mpath - 通过物化路径模式管理我的猫鼬树, https://www.npmjs.com/package/mongoose-mpath
express-restify-mongoose - 为 mongoose 模型生成灵活的 REST 接口,https: //www.npmjs.com/package/express-restify-mongoose
在我将所有代码更改为这两种新模式之前,我想确认一下这是否是正确的方法。换句话说,快速评估我是否可以期望这两个包在我的树模式/模型上完美地协同工作,以及 express-restify-mongoose 包是否会帮助我公开 mongoose-mpath 包定义的特定方法作为 REST API:
猫鼬-mpath 包:
- 为树中的每个节点添加和管理两个字段,父节点和路径,以管理树的行为。当父级更新时,它会自动更新路径字段。
- 这发生在幕后,通过树模式上的 .pre 钩子,称为“物化树模式”。
- 它为物化树添加了特定的get方法,如getAncestors()、getAllChildren()、getImmediateChildren()、getChildrenTree()、getParent()、level。
显然,我希望 mongoose-mpath 提供的这 6 个 get 方法也公开为 REST API!
生成 REST API 正是另一个包 express-restify-mongoose 的工作:
- 在其文档中,我读到它为模型生成 REST API,例如 GET、PUT、POST、DELETE、PATCH
- 所以我假设,如果我将它用于我的新(物化)树模式,它会给我这样基本的 CRUD REST API。
- 在幕后,我看到它还设置了各种 .pre 钩子等。
我的具体问题:
- 添加到我的架构中的这两个包是否存在以某种方式干扰的风险,或者我可以相信它们会优雅地一起工作吗?
- 最重要的是,有没有办法让 express-restify 也为 mongoose-mpath 包定义的 6 种方法(如上所列)生成 REST API?
- 对于架构上定义的所有方法(在本例中为 MPath),这是否会自动发生,或者我是否需要手动将此类方法的代码插入到 Mongoose Restify 生成的文件夹、文件和代码中(如果是,在哪里以及如何?)
- 还有其他替代方法可以实现我的需要吗?我知道周围还有其他 REST 生成器,但 Mongoose Restify 似乎很受欢迎,这可能是有原因的。
解决方案
我曾经维护 express-restify-mongoose
添加到我的架构中的这两个包是否存在以某种方式干扰的风险,或者我可以相信它们会优雅地一起工作吗?
据我所知,他们不应该干涉 express-restify-mongoose 不会修补猫鼬模式。
最重要的是,有没有办法让 express-restify 也为 mongoose-mpath 包定义的 6 种方法(如上所列)生成 REST API?
express-restify-mongoose 仅支持 mongoose 本身,也许某种形式的中间件或钩子可能会有所帮助。
对于架构上定义的所有方法(在本例中为 MPath),这是否会自动发生,或者我是否需要手动将此类方法的代码插入到 Mongoose Restify 生成的文件夹、文件和代码中(如果是,在哪里以及如何?)
您必须手动完成。serve
返回挂载端点的 URI,以便您可以使用它来定义其他路由。
还有其他替代方法可以实现我的需要吗?我知道周围还有其他 REST 生成器,但 Mongoose Restify 似乎很受欢迎,这可能是有原因的。
我不知道,但也许其他人可以参与进来!
推荐阅读
- sql - 在 BQ 公共数据集中获取顶级专利国家、代码
- node.js - 采取新行动后,为什么我不能更新猫鼬中的对象?
- ruby-on-rails - 如何将元素 ID 传递给有线电视订阅?
- python - 检查输入时出错:预期 input_49 的形状为 (512, 512, 1) 但得到的数组的形状为 (28, 28, 1)
- c# - 如何检查请求是否发送到具有 [Authorize] 属性的方法?
- javascript - Express 不重定向 React
- dart - 如何更新颤振列表中的单个项目,作为最佳方式
- javascript - d3.js 中的 3 个数组 - 如何调用其他数组?
- css - 改变水平滚动条设计而不影响垂直一
- listview - 无法使用可见属性和 mvvm 绑定在列表视图中隐藏行/缩小列表视图项