我正在尝试将应用程序从风帆转移到FOXX。我期待我可以在FOXX中使用node.js模块,但我遇到了一个问题。我需要在服务器上创建一个“工作”目录,以执行对SCM存储库的操作。我安装了“删除”和“mkdirp”模块。 mkdirp模块调用fs.lstatSync,报告在FOXX下丢失。安装fs的本地节点副本并不能解决问题。
如果这是一个问题,那么我的一些其他任务,如产生外部命令行程序可能无法实现。在这种情况下,我可能需要重新考虑将所有任务移动到FOXX,但这意味着在帆和FOXX中复制很多功能,这可能是部署的噩梦。
答案 0 :(得分:2)
虽然Foxx非常灵活,但它只是"而且#34;在ArangoDB的JavaScript环境中运行。此环境与Node(以及NPM上的某些模块)不完全兼容,尤其是涉及异步代码或文件系统和网络I / O时。
具体而言,fs
模块与Node的内置fs
模块不同。
幸运的是remove
和mkdirp
模块提供的两个功能已经内置在ArangoDB的fs
模块中:
fs.makeDirectoryRecursive
相当于mkdirp
fs.removeDirectoryRecursive
相当于remove
可以从ArangoDB中生成外部进程,但相关功能是内部API的一部分,并不打算在Foxx服务中使用(除了其他限制之外,目前无法获得输出,只有退出状态)。
根据您想要实现的目标以及您的性能要求,将I / O密码分离到外部Node微服务中可能确实更好。 Foxx最适合作为底层数据库的应用程序逻辑包装器,所有Foxx代码都有效地与其他ArangoDB JavaScript代码一起运行,因此长时间运行的请求可能会影响ArangoDB处理需要触及JavaScript层的其他请求的能力。
在您的特定情况下(您提到与SCM软件交互)我建议创建一个小型独立节点服务来处理SCM相关逻辑,并在必要时(或者甚至直接在两个服务之间)与sails进行通信。虽然这意味着最初增加了一些开销,但它在ArangoDB上花费在非数据库相关任务上的CPU周期也会更具可扩展性。