查询存储为用户的属性,因此可通过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 服务确实可以访问和执行为用户存储的查询,但我仍然强烈建议不要在生产中这样做。