【问题标题】:Fauna: Select from pure JSFauna:从纯 JS 中选择
【发布时间】:2022-01-11 08:56:39
【问题描述】:

我有兴趣在只读模式下从纯 JS 浏览器中使用 Fauna。 对于这种情况,官方文档要么缺乏可理解的信息,要么我无法弄清楚。 请帮我理解。

我正在尝试运行这样的查询:

Map(Paginate(Documents(Collection('spells'))), Lambda('x', Get(Var('x'))));

从 shell 运行这个查询会给我结果。

我想将此查询推送到 JavaScript 变量。 但我不明白该怎么做。 这是我的代码:

var client = new faunadb.Client({
  secret: '320438826900127936',
  keepAlive: false,
  domain: 'db.eu.fauna.com',
  // NOTE: Use the correct domain for your database's Region Group.
  port: 443,
  scheme: 'https',
});

var helper = client.paginate(
  q.Match(
    q.Index('spells'),
    '101'
  )
)

paginate.then(function(response) {
  console.log(response.ref) // Would log the ref to console.
})

请帮助我使用纯 JavaScript 从 DB 获取输出。

【问题讨论】:

    标签: javascript select facebook-fql faunadb


    【解决方案1】:

    使用 JavaScript 驱动程序,所有 FQL 函数都位于 faunadb.query 命名空间中。通常,开发人员会在其脚本的顶部执行此操作:

    const faunadb = require('faunadb')
    const q = faunadb.query
    

    之后,可以使用 q 对象访问 FQL 函数。例如:q.Add(1, 2)

    否则,您可以使用解构将 FQL 函数导入脚本的命名空间,如下所示:

    const faunadb = require('faunadb')
    const {
      Documents,
      Collection,
      Get,
      Index,
      Lambda,
      Match,
      Paginate
    } = faunadb.query
    

    然后您可以“直接”调用 FQL 函数,例如Add(1, 2).

    如果您使用解构,请务必导入您打算在查询中使用的所有 FQL 函数。并非所有 FQL 函数都可以“按原样”导入,因为它们的某些名称会与内置 JavaScript 名称冲突,例如 Function。对于那些,您必须直接分配它们:

    const FaunaFunction = faunadb.query.Function
    

    然后在编写查询时使用您指定的本地名称(在本例中为FaunaFunction)。

    无论哪种方式,在调用 client.query() 或在您的情况下为 client.paginate() 函数之前,查询本身都不会发送到 Fauna。

    这意味着您可以将 FQL 函数调用分配给 JavaScript 变量。使用所需的查询,可能如下所示:

    const spellsQuery = q.Map(
      q.Paginate(
        q.Documents(q.Collection('spells'))
      ),
      q.Lambda('x', q.Get(q.Var('x')))
    )
    

    那么你可以这样做:

    client.query(spellsQuery)
    .then(res => console.log(res))
    

    如果您执行分页,则可以使用client.paginate。您想要的查询调用Map,因此client.pagination 助手会妨碍您。我的示例使用client.query

    请注意,当您配置客户端连接对象时,您不需要指定portscheme 选项;您已经在使用默认值。除非您的工作流程特别需要,否则您可能不应该更改 keepAlive 选项。

    另外,我看到您的示例中没有包含实际秘密,这是一件好事:如果您确实包含了实际秘密,那么任何拥有该秘密的人都可以像您一样访问您的数据库。

    如果您想查看在网页中运行的完整(但简单)基于 Fauna 的应用程序,请参阅:https://github.com/fauna-labs/todo-vanillajs

    【讨论】:

    • 感谢您的出色回答!我将使用只读角色来显示内容,因此实际的秘密将在页面源中。但是,该网站计划展示数据库的内容,因此不会有问题。
    • 听起来不错。如果对您有帮助,您应该接受我的回答。
    猜你喜欢
    • 2018-10-21
    • 2017-01-16
    • 2020-11-04
    • 2022-01-22
    • 2016-07-14
    • 2013-08-18
    • 2012-10-19
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多