【问题标题】:How to create a custom javascript function and call it anywhere in marklogic?如何创建自定义 javascript 函数并在 marklogic 中的任何位置调用它?
【发布时间】:2018-12-12 12:11:37
【问题描述】:

我想创建一个 javascript 函数并将其加载到我自己的模块数据库中,并且我想调用该函数。

最初,我尝试使用 xquery 函数。我将 xquery 函数加载到我自己的模块数据库中(如 top-songs-mods)。当我尝试调用该函数时,出现以下异常。

XDMP-MODNOTFOUND:(错误:XQST0059)

我还为文档添加了执行、更新、读取权限。

之后,当我将相同的 xquery 函数加载到 MODULES 数据库(默认情况下)时,我可以调用该函数。

我指的是这个文件https://docs.marklogic.com/guide/app-dev/import_modules#id_26329

在我的应用服务器中,root 设置为“/”,模块设置为“top-songs-mods”。

谁能解释一下,如何将一个模块加载到我们自己的模块数据库中,然后从库模块或主模块中导入它并在任何地方调用该函数?

【问题讨论】:

  • 你能展示插入JavaScript模块的代码和需要JavaScript模块的代码吗?要求代码看起来像 docs.marklogic.com/guide/jsref/functions#id_21536 吗?
  • curl --anyauth --user admin:admin -X PUT -T test.sjs "localhost:8045/v1/documents?uri=/…"
  • '使用严格'; const test=require("/test.sjs"); test.myFunction();
  • curl 将 POST 的内容类型默认为 application/x-www-form-urlencoded 并且可能对 PUT 执行相同的操作。使用 -i 或 -v 标头应该显示是否发生这种情况。

标签: marklogic


【解决方案1】:

这个页面解释了如何创建一个简单的 SJS 模块: https://developer.marklogic.com/learn/sjs/javascript-modules

我创建了一个名为test.sjs 的本地文件,内容如下:

module.exports= {
  myFunction: test
};

function test() {
 return "test";
}

使用与您发布的内容类似的 curl 命令,我将 test.sjs 文件放入 example-modules 数据库:

curl --anyauth --user admin:admin -X PUT -T test.sjs "localhost:8123/v1/documents?uri=/test.sjs&database=example-modules"

然后在查询控制台中针对具有 example-modules 作为模块数据库的应用服务器执行以下代码:

const test = require("/test.sjs");
test.myFunction();

执行成功,返回:test

【讨论】:

  • 我做了和你一样的事,但我还是得到了这个例外。 [javascript] XDMP-MODNOTFOUND: const test = require("/test.sjs"); -- 未找到模块/test.sjs
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多