【问题标题】:cannot find a module from a different database in marklogic在 marklogic 中找不到来自不同数据库的模块
【发布时间】:2019-01-12 15:49:43
【问题描述】:

好的,我有一个 MarkLogic 9.0.2 数据库,其中部署了两个应用程序。比方说 A 和 B。现在我想从 A 在 B 中运行一些代码,我们可以使用 xdmp.eval() 执行此操作,但我要运行的代码需要找到部署在 B 的模块数据库中的模块。

我似乎无法正常工作。

在数据库 B 中运行的代码有效:

declareUpdate();
var prj = require('/root/lib/project-lib.xqy');
prj.createProject('giraffe', 'A project about giraffes');

在模块库中查找并运行 createProject 函数...

现在从数据库 A 我尝试通过 xdmp.eval() 运行它,如下所示:

declareUpdate();

var options = { "isolation" : "different-transaction", 
                "database" : xdmp.database("data-hub-FINAL"),
                "modules" : xdmp.database("data-hub-MODULES")
              }

xdmp.eval("declareUpdate();var prj = require('/root/lib/project-lib.xqy');prj.createProject('fromcluey giraffe', 'A project about giraffes from cluey');"
  , options);

但是给了我:

[javascript] XDMP-MODNOTFOUND: declareUpdate();var prj = require('/root/lib/project-lib.xqy');prj.createProject('fromcluey giraffe', '来自线索的关于长颈鹿的项目' ); -- 未找到模块 /root/lib/project-lib.xqy

谁能告诉我应该如何从 A 中找到 project-lib.xqy 模块?

【问题讨论】:

    标签: javascript module marklogic marklogic-9


    【解决方案1】:

    文档权限是我首先想到的,它也适用于模块、模式、触发器等,而不仅仅是文档。特权二。模块根目录也很重要。

    但是,上面的xdmp.eval 有一个简单的错字,这是最大的罪魁祸首:该函数接受 3 个参数,而不是 2 个。而 options 是第三个,而不是第二个。

    应该是:xdmp:eval("...", null, options)

    HTH!

    【讨论】:

    • 是的,就是这么简单,如果解释器能警告这种微不足道的错误,那就太好了。
    • 问题是第二个和第三个参数都是哈希表,所以它只是认为选项是需要传入的变量..
    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2023-03-22
    • 2020-03-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多