【问题标题】:Importing JS modules from MarkLogic console从 MarkLogic 控制台导入 JS 模块
【发布时间】:2021-07-25 22:29:28
【问题描述】:

(请原谅我的术语错误,因为我是 JS 和 MarkLogic 的新手,但如果我在某处有错误,请纠正我。)

我想使用 MarkLogic qconsole(服务器端 JS)从外部模块 bignumber.js 导入一个 BigNumber 对象(或者它是一个类,构造..)。

这是他们 github 中建议的方式,但它适用于 Node.js 而不是 SSJS。 https://github.com/MikeMcl/bignumber.js/

const BigNumber = require('bignumber.js');
import BigNumber from "bignumber.js";
import { BigNumber } from "bignumber.js";

到目前为止,我的设置如下所示:

我已经打开了 HTTP 服务器

  • 端口:8111
  • 根目录:/
  • 模块:my-db-modules
  • 数据库 my-db
  • 默认用户:admin

我将bignumber.js 文档插入到my-db-modules 中,其中包含以下几行:

declareUpdate();
xdmp.documentLoad('path/bignumber.js', {'uri': 'bignumber.js'});

我也插入了bignumber.mjs 文件。

当我尝试从 .js 文件导入 BigNumber 时,我得到 'Module bignumber.js not found' 如果我尝试从.mjs 文件导入它,我会得到 'Document is not of executable mimetype。 URI:bignumber.mjs'

我找到了关于如何使用模块 db 的部分:https://docs.marklogic.com/guide/admin/databases#id_38484

但我不知道我是否做对了,因为我尝试将我的 HTTP 服务器的根更改为 http://marklogic.com/,但没有任何结果。

【问题讨论】:

  • 尝试使用前导斜杠 /bignumber.js/bignumber.sjs 插入模块。我希望它可以与不以前导斜杠开头的模块 URI 一起使用,但重现了您的问题并发现它确实 import 并且当我使用前导斜杠时 require 会起作用,因此可能能够解决该分辨率问题.
  • @MadsHansen 哇,真是太愚蠢了……非常感谢!
  • 缺少前导 / 的罪魁祸首是 MarkLogic 将始终认为您正在尝试要求相对路径,如果您不是从同级文件中调用它,这很可能会失败..
  • 你们两个知道任何 MarkLogic 社区吗?我尝试搜索 gitter,但没有任何结果

标签: javascript marklogic serverside-javascript


【解决方案1】:

正如MadsHansen 在评论中指出的那样 - 插入文档时应在其名称中使用前导斜杠。

我只是想澄清下一部分:

  • 使用require 导入适用于.js 文件
const BigNumber = require('/bignumber.js');
  • 这种导入方式适用于 .mjs 文件
import BigNumber from "/bignumber.mjs";
import { BigNumber } from "/bignumber.mjs";

.js.mjs 文件都应该插入到模块数据库中,并在主数据库中使用。

我用这些行加载了文件:

xdmp.documentLoad('path/bignumber.js', {'uri': '/bignumber.js'});
xdmp.documentLoad('path/bignumber.mjs', {'uri': '/bignumber.mjs'});

【讨论】:

  • 您不需要专门的路径。我认为 Mads 的建议是因为它干净且易于排除故障并且不会让人感到困惑。举个例子,你说文件加载'path/bignumber.js'是IRI..然后你试图要求'bignumber.js'..这与'path/bignumber.js'不同的IRI,为此要求不匹配是完全有道理的。是的,您可以根据相对路径进行要求,但即使那样,'/' 和 'path' 也不相同,所以 bignumber.js woukd 仍然没有解决。
  • docs.marklogic.com/xdmp.documentLoad 这里是xdmp.documentLoad函数的定义。第一个参数是加载文档的位置。第二个参数是可选的,它指定文档的 URI,一旦它被加载到数据库中。我不知道为什么它没有工作,但现在它工作正常。我唯一改变的是我导入文件的名称。
  • 好点。现在我很困惑。将尝试此操作并注意原始帖子中的其他 cmets。好奇
  • require function documentation 解释了有关路径的规则。
  • @redCrusaderJr 我建议 marklogic.com/community 这指向包括 developer.marklogic.com 在内的资源 曾经有邮件列表,但那些已被淘汰 - 我相信与 GDPR 有关的 Marklogic 页面指的是堆栈溢出.这样做的副作用是所有问题都必须遵循堆栈溢出准则。但是,许多答案都是由经验丰富的用户以及产品工程师给出的。最后,我确实知道有些人使用 quora.com,但我对此了解不多。
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多