【问题标题】:How do I parse string FQL to a query using faunadb-js?如何将字符串 FQL 解析为使用 zoodb-js 的查询?
【发布时间】:2021-12-02 10:52:48
【问题描述】:

假设我有一个类似const fql = "CreateCollection({ name: "users" })" 的字符串。如何在 JS 中把它变成一个区系数据库Expr

【问题讨论】:

    标签: faunadb


    【解决方案1】:

    您自己找到了正确答案。 FQL 不是基于字符串的语言。这种方法可以避免 SQL 注入等问题,但它确实意味着您需要使用驱动程序、控制台或 Fauna Schema Migrate (FSM) 等工具在somewhere 编写查询。

    const fql = "CreateCollection({ name: "users" })"
    

    您给出的示例倾向于架构/资源管理。如果这是您的实际需求,请考虑 FSM 或 Fauna Serverless Framework plugin

    如果您正在使用 JavaScript 构建前端应用程序,FSM 可能是正确的方法,因为它直接嵌入到您的应用程序中。 它还可能为您提供有关如何将字符串转换为 FQL 的更多提示。您可以在单个 FQL 文件中执行上述操作,例如,fauna/resources/collections/users.fql

    CreateCollection({ name: "users" })
    

    如果您将基础架构作为代码在单独的管道中进行,或者已经在使用 Serverless Framework 进行构建,则该插件可能更适合。

    如果您想查看 Pulumi 或 Terraform provider plugins 之类的其他内容,请在论坛中提交 feature request

    【讨论】:

    • 谢谢!我的用例是以编程方式实例化本地测试数据库,是的。我认为 FSM 尚不支持此功能(这是“潜在扩展”下列出的内容之一)。我现在有一个可行的解决方案,只需在 .ts 文件中定义我的架构。
    • "以编程方式实例化本地测试数据库" --> 查看 Fwitter 中的测试,例如fweet spec 它们是用 JavaScript 编写的,但确实从给定的键创建子数据库。对于“本地”部分 - 请参阅 Fauna Dev 创建客户端时,您需要将 domain 属性指向本地实例。见this example
    【解决方案2】:

    目前这样做的唯一方法似乎是将 FQL 评估为 JavaScript。

    动物外壳eval command 是使用 esprima 实现的,将 FQL 解析为 ECMAScript,然后通过节点的 vm api 和 escodegen 运行它。

    如果您可以选择,将 FQL 文件重写为 JS 文件可能会更容易!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-20
      • 2010-09-09
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多