node.js - ArangoDB FOXX Node 扩展

标签 node.js arangodb foxx

我正在尝试将应用程序从 sails 移至 FOXX。我本以为可以在 FOXX 中使用 node.js 模块,但遇到了问题。我需要在服务器上创建一个“工作”目录来对 SCM 存储库执行操作。我安装了“remove”和“mkdirp”模块。 mkdirp 模块调用 fs.lstatSync,报告在 FOXX 下丢失。安装 fs 的本地 Node 副本并不能解决问题。

如果这是一个问题,那么我的一些其他任务(例如生成外部命令行程序)可能无法完成。在这种情况下,我可能需要重新考虑将所有任务移至 FOXX,但这意味着在 sails 和 FOXX 中复制大量功能,这可能是部署噩梦。

最佳答案

虽然 Foxx 非常灵活,但它“只是”在 ArangoDB 的 JavaScript 环境中运行。此环境与 Node(以及 NPM 上的某些模块)不完全兼容,尤其是在涉及异步代码或文件系统和网络 I/O 时。

具体来说,fs 模块与 Node 的内置 fs 模块不同。

幸运的是,removemkdirp 模块提供的两个功能已经内置在 ArangoDB 的 fs 模块中:

  • fs.makeDirectoryRecursive 相当于 mkdirp
  • fs.removeDirectoryRecursive 相当于 remove

可以从 ArangoDB 内部生成外部进程,但相关功能是内部 API 的一部分,并不打算在 Foxx 服务中使用(除其他限制外,目前无法获取输出,只能退出状态)。

根据您想要实现的目标以及您的性能要求,将 I/O 密集型代码分离到外部 Node 微服务中确实可能是一个更好的主意。 Foxx 最适合作为底层数据库的应用程序逻辑包装器,所有 Foxx 代码都可以与其他 ArangoDB JavaScript 代码一起有效运行,因此长时间运行的请求可能会影响 ArangoDB 处理需要接触 JavaScript 层的其他请求的能力。

在您的特定情况下(您提到与 SCM 软件交互),我建议创建一个小型独立 Node 服务来处理 SCM 相关逻辑,并根据需要从 sails 与两者进行通信(甚至直接在两个服务之间进行通信)。虽然这意味着最初会增加一些开销,但它也比在 ArangoDB 中将 CPU 周期花费在非数据库相关任务上更具可扩展性。

关于node.js - ArangoDB FOXX Node 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36138410/

相关文章:

socket.io - Foxx/ArangoDB Server 是否支持 Socket.IO?

javascript - 有没有简单的方法从页面上的 td 元素获取数组? (node.js/cheerio/jQuery)

node.js - 在数组中的对象中按日期搜索

node.js - npm install everything 失败并显示 ECONNRESET

javascript - 在 arangojs 中配置 TLS 证书颁发机构

graph-databases - 在 ArangoDB 中以编程方式创建边

arangodb - 将 GraphiQL 与 Foxx 结合使用

node.js - 捕获 stdout 和 stderr 以测试 Node.js CLI

ArangoDB 并发问题

arangodb - EMPLACE 使用 gcc 4.7 编译时出现问题