您可以使用 ArangoDB Foxx 作为应用程序的唯一后端,但是在执行此操作时务必牢记 Foxx 的局限性(与 Node.js 等通用 JS 环境相比)。
你提到加密。虽然 ArangoDB 确实支持一些密码学(例如 HMAC 签名和密码的 PBKDF2 密钥派生),但支持不如 Node.js 中的详尽和可扩展。此外,当使用计算量大的密码学时,这将影响数据库的性能(因为与 Node.js 不同,Foxx 是严格同步的,因此所有操作都应该被视为阻塞)。
ArangoDB 不支持开箱即用的基于角色的身份验证,但使用 Foxx 在 ArangoDB 中实现它是完全合理的(就像您在 Node.js 中实现它一样,除了您不需要离开数据库)。
对于会话,通常有两种可能的方法:您可以使用带有会话文档的集合(使用 ArangoDB 作为会话后端),或者您可以使用签名令牌保持服务无状态(Foxx 提供开箱即用的 JWT 支持)。
复杂/存储的查询和输入验证(使用最初为 hapi 编写的 joi 模式库)实际上是 Foxx 的一些主要用例,因此这些不应该是任何问题。
Foxx 有自己的队列任务机制,也可以提前安排或定期重复。但是,根据您的要求,外部作业或消息队列可能更合适。好消息是您可以立即开始使用内置作业队列,如果在开发过程中出现需要,您仍然可以继续使用专用解决方案。
至于中间件和 NPM 包:Foxx 与 Node.js 代码不完全兼容。虽然我们提供了大量兼容性代码并尽可能保持核心模块的兼容性,但一个很大的区别是 Node.js 通常用于执行异步操作,而在 ArangoDB 中所有操作都是同步的。
如果您的 Node.js 模块不使用加密、文件或网络 I/O 并且不使用异步 API(例如 setTimeout、promise),它们可能与 Foxx 兼容。许多实用程序库(如 lodash)完全没有问题。即使您发现一个模块不起作用,也可以为它编写一个适配器,就像我们使用 mocha(集成到 Foxx)和 GraphQL(通过 NPM 上的 graphql-sync 包)所做的那样。
根据我的经验,将 Foxx 服务置于 Node.js 的薄层(例如,一个简单的快速应用程序,主要代理 Foxx API)和/或将后端的某些部分委托给独立的 Node.js 是一个很好的方法。 Node.js 微服务(例如与电子邮件或 LDAP 等非 HTTP 服务的集成),可以通过 HTTP 集成到 Foxx 中。
还有一件事:虽然由于特定于节点的依赖关系和异步逻辑,许多现有的 express 中间件可能与 Foxx 不兼容,但 ArangoDB 3 将带来一个新版本的 Foxx,支持使用功能 express 兼容的 API 的中间件。