【问题标题】:Recompiling JS in the arangodb codebase? (trying to hack sth into Foxx)在 arangodb 代码库中重新编译 JS? (试图入侵 Foxx)
【发布时间】:2014-12-01 22:40:34
【问题描述】:

我对 arangodb 代码库中的一个 .js 文件进行了更改,并制作了 clean && make 并重新启动了 arangod,但似乎没有收到更改。如何确保更改已激活?

修改后的文件是:js/server/modules/org/arangodb/foxx/query.js


让我想到这个想法的文档章节是 https://docs.arangodb.com/Foxx/FoxxRepository.html#defining_custom_queries,顺便说一句,它没有显示如何将参数传递给查询,它引用了我找不到的“Foxx 查询章节”。


最终,目标是不仅将参数传递给查询,还传递给被调用的转换函数。区别是

diff --git a/js/server/modules/org/arangodb/foxx/query.js b/js/server/modules/org/arangodb/foxx/query.js
index 49e320c..ac37f34 100644
--- a/js/server/modules/org/arangodb/foxx/query.js
+++ b/js/server/modules/org/arangodb/foxx/query.js
@@ -61,7 +61,7 @@ exports.createQuery = function createQuery (cfg) {
     throw new Error('Expected transform to be a function.');
   }

-  return function query(vars) {
+  return function query(vars, trArgs) {
     vars = _.extend({}, defaults, vars);
     if (context) {
       _.each(vars, function (value, key) {
@@ -76,6 +76,6 @@ exports.createQuery = function createQuery (cfg) {
         return new Model(data);
       });
     }
-    return transform ? transform(result) : result;
+    return transform ? transform(result, trArgs:) : result;
   };
-};
\ No newline at end of file
+};

存储库如下所示:

(function () {
    "use strict";

    var Foxx    = require("org/arangodb/foxx");
    var Pingers = Foxx.Repository.extend({

        ping: Foxx.createQuery({
            query: "FOR p IN pingers FILTER p._key == @id return p",
            transform: function(items, args) {
                var lang = args.lang;
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    item.name = item.name[lang];
                    item.description = item.description[lang];
                }
                return items;
            }
        }),

    exports.Repository = Pingers;
}());

还有控制器:

ctrl.get("/ping", function(req, res) {
    var id = req.param('id');
    var lang = req.param('lang');
    res.json(pingers.ping({id: id}, {lang: lang}));
});

【问题讨论】:

    标签: arangodb foxx


    【解决方案1】:

    我应该足以重新启动服务器。 Javascript 文件未按要求预编译和加载。

    线

    return transform ? transform(result, trArgs:) : result;
    

    看起来很可疑。 trArgs 后面的“:”很奇怪。这应该会引发错误。

    【讨论】:

    • 哦,没看到,但错误并没有在那里发生。我刚刚发现js文件没有被拾取的问题:我使用/etc中的系统配置来启动服务器,需要覆盖'startup-directory'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多