我正试着把一个应用程序从sails转移到FOXX。我原以为我可以在FOXX中使用node.js模块,但我遇到了一个问题。我需要在服务器上创建一个“工作”目录来执行对SCM存储库的操作。我安装了“删除”和"mkdirp“模块。mkdirp模块调用fs.lstatSync,该模块在FOXX下报告缺失。安装fs的本地节点副本并不能解决问题。
如果这是一个问题,那么我的一些其他任务,如生成外部命令行程序可能是不可能的。在这种情况下,我可能需要重新考虑将所有任务转移到FOXX,但这意味着复制sails和FOXX中的许多功能,这可能是部署的噩梦。
发布于 2016-03-22 15:08:45
虽然Foxx非常灵活,但它“只是”运行在ArangoDB的JavaScript环境中。这个环境不完全兼容Node (以及NPM上的一些模块),特别是在异步代码或文件系统以及网络I/O方面。
具体来说,fs模块与Node的内置fs模块不同。
幸运的是,remove和mkdirp模块提供的两个功能已经内置在ArangoDB的fs模块中:
fs.makeDirectoryRecursive等价于mkdirpfs.removeDirectoryRecursive等价于remove可以从ArangoDB内部生成外部进程,但相关功能是内部API的一部分,不打算用于Foxx服务(除其他限制外,目前无法获得输出,只有退出状态)。
根据您想要实现的目标和性能要求,将I/O密集型代码分离到外部Node微服务中可能确实是一个更好的主意。Foxx最适合作为底层数据库的应用程序逻辑包装器,所有Foxx代码都与其他ArangoDB JavaScript代码一起有效运行,因此长时间运行的请求会影响ArangoDB处理其他需要访问JavaScript层的请求的能力。
在您的特定情况下(您提到了与SCM软件的交互),我建议创建一个小型的独立节点服务,以处理SCM相关的逻辑,并在必要时(甚至在两个服务之间)进行sails通信。虽然这意味着最初增加了一些开销,但它也将比在ArangoDB中用于非数据库相关任务的CPU周期具有更大的可伸缩性。
https://stackoverflow.com/questions/36138410
复制相似问题