繁体   English   中英

Foxx 可以调用 ArangoDb 中定义的查询吗?

[英]Can Foxx call a query defined in ArangoDb?

我不知道是否可以在 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 方法似乎只接受查询字符串。

查询存储为用户的属性,因此可以通过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 ,我只在arangosh测试了这个,而不是arangosh应用程序——也许 users 模块在那里不可用。 如果它有效,您可能必须用用户名作为字符串替换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 服务确实可以访问和执行为用户存储的查询,但我仍然强烈建议不要在生产中这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM