[英]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.