【问题标题】:Can Foxx call a query defined in ArangoDb?Foxx 可以调用 ArangoDb 中定义的查询吗?
【发布时间】:2019-07-08 08:51:00
【问题描述】:

我无法确定是否可以在 Foxx 脚本中调用在 ArangoDb Web UI 上设置的 AQL 查询 - 就像存储过程可以由 RDMS 的服务调用一样。

到目前为止,我看到的所有示例都显示了嵌入到 Foxx 服务 JavaScript 中的 AQL。

const result = db._query([name of query defined in Db], {
  "@arg": arg-value
}).toArray();

我希望 ArangoDb 上定义的查询能够运行并从 Foxx 服务传递参数值。但 _query 方法似乎只接受查询字符串。

【问题讨论】:

    标签: aql foxx


    【解决方案1】:

    查询存储为用户的属性,因此可通过users-API 获得:

    var _ = require("lodash"); // helper to group the queries
    var users = require('@arangodb/users'); 
    var myQueries = _.groupBy(users.document(users.currentUser())['extra']['queries'], 'name');
    
    const result = db._query(myQueries['name of query defined in Db'], ...);
    

    lodash 默认可用,无需安装。

    这在任何地方都没有明确记录——我查看了查询编辑器的网络流量,以在用户的​​“额外/查询”下找到查询;比我搜索 js 用户 API 并找到一篇关于“用户管理”的文章。我会说缺乏文件是一个明显的“买者自负”——它可能会在没有通知的情况下发生变化;但这应该能让你继续前进。

    另外,想了想,我只在arangosh 中测试了这个,而不是 foxx 应用程序——也许用户模块在那里不可用。如果可行,您可能必须将 users.currentUser() 调用替换为字符串形式的用户名。

    鉴于这种方法很容易破坏您的应用程序,我不建议在研发和/或原型设计之外使用它(如果可行的话...)。

    编辑:我实现了这个来测试它:

    router.post(
        '/getQueries',
        /**
         * @param {Object} req
         * @param {Object} res
         */
        function(req, res) {
            var _ = require("lodash"); // helper to group the queries
            var users = require('@arangodb/users'); 
            var myQueries = _.groupBy(users.document(req.body.user, ['extra']['queries'], 'name'));
    
            res.json({success: (myQueries !== null), queries: myQueries, error: null});
        }).summary('Return queries stored for the given user').body(joi.object().keys({
            'user': joi.string().required()
        }).unknown(true), ['json']);
    

    这可行,查询是具有以下形式的对象:

    [
                   "value" => """
                     FOR x IN @params\n
                        RETURN x
                     """,
                   "parameter" => [
                     "params" => "",
                   ],
                   "name" => "x_test",
                 ],
    

    所以 foxx 服务确实可以访问和执行为用户存储的查询,但我仍然强烈建议不要在生产中这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多