更新 1:我在这方面取得了很大进展。我几乎放弃了(至少现在,但可能是长期的)允许用户上传模块的想法。但是,我正在开发一种结构,以便可以定义和加载多个模块。一个模块将被初始化,设置它自己的路由,并有一个“公共”目录供 Javascript 服务。我看到的越多,我就越意识到我可以(应该)也移动现在系统范围内的调用在一个名为“系统”的模块中。
更新2:我在这方面取得了巨大进展。我即将在 GitHub 上提交大量代码,这将允许人们使用 Node 和 Express 进行非常非常好的模块化编程(使用暴露客户端和服务器端代码的模块)。敬请期待。
更新3:我将这个东西重写为一个系统来注册模块并使它们能够通过事件/挂钩系统进行通信。它进展得非常好。我有大量的代码已经可以使用了——我只是将它移植到新系统中。随意查看 GitHub 上的项目:https ://github.com/mercmobily/hotplate )
更新4:这很好。事实证明,我关于将模块作为客户端和服务器的想法确实有效。
更新 5:该模块越来越接近可用的东西。我实现了一个新的加载器,它将考虑 init() 函数将调用All() 的内容——并确保首先加载提供该挂钩的模块。这将电炉打开到一个全新的水平。
更新 6:Hotplate 现在接近 12000 行代码。到它完成时,也就是 2 月的某个时候,我想它会接近 20000 行代码。它做了很多事情,这一切都是从 StackOverflow 开始的!我需要它来开发自己的 SaaS,所以我真的需要在 2 月之前完成它(这样我就可以冲刺到 7 月并完成 BookingDojo 的第一个版本)。谢谢大家!
我正在写一些可能会变成一个相当大的软件的东西。简而言之,它是 nodejs + Express + Mongodb/Mongoose + Dojo(客户端)。
注意:本文中的问题标记为 [Q1]、[Q2] 等。
来自 Drupal 背景(并且知道它的 coooomplex 是如何演变的,这是我想避免的),我有点模块狂。目前,我已经完成了应用程序的样板(hotplate:https ://github.com/mercmobily/hotplate )。它完成了所有无聊的事情(用户、工作区、密码提醒等),并且缺少很多部分。
我想提出一种设计,允许模块采用与 Drupal 类似的方式(但可能更好)。那是:
- 模块可以定义新的路由,并处理它们
- 模块在系统范围内安装,然后每个工作区都可以启用它们的集合列表
最初的架构可能是这样的:
- 一个“模块”目录,其中每个模块有一个目录
- 每个模块都有一个用于 Javascript 方面的“公共”文件的目录
- 每个模块都有 public/startup.js ,它会包含在应用程序的 javascript 中
- 每个模块都有 server/node.js ,如果/需要时,服务器会动态包含它
- 将定义一个路由,例如 /app/:workspaceid/modules/MODULE_NAME/.* 带有一个中间件,该中间件检查该工作区是否启用了 MODULE_NAME - 如果启用,则使用传递的参数调用模块的函数
[Q1]:这是否有些模糊?
问题:
我想让这个动态。我希望在现场需要时需要模块。这应该很容易做到,只需即时要求。
server/node.js 会调用一个函数,但该函数感觉/看起来非常像路由器本身
【Q2】你对这个有什么具体的提示吗?
这些似乎都不是什么大问题。但是,当您谈论安全性时,真正的问题来了。
隐私。这是一个讨厌的。目前,所有的调用都会对 mongoDb 过滤通过 workspaceId 进行正确的查询。我想以某种方式强制执行,以便模块无法明确访问数据库,因此每个模块都无法访问属于其他工作区的数据
用户定义的模块。我很乐意让用户能够上传他们自己的模块(也许让其他用户可以使用它们)。但是,这实际上意味着允许人们上传将由节点本身执行的代码!你会怎么做?
[Q3] 你会如何处理这些隐私/安全问题?有什么方法可以在某种节点沙箱中运行用户上传的代码?访问文件系统等呢?
谢谢!