首页 > 解决方案 > 在 MarkLogic 模块中使用节点模块

问题描述

我正在运行带有公开 REST API 的 Marklogic 服务器。我用自己的资源扩展了 API。这些端点只是文档规定的 .sjs 文件。是否可以在这些 sjs 文件中使用常规节点模块(通过 npm 安装)?

我正在使用 ml-gradle 来部署服务器和端点。我不是要安装 npm 模块的目录。

我尝试做一个 npm install 然后用相对路径导入它

const lodash = require('../node_modules/lodash') 

但是,我的 sjs 文件永远找不到这些模块。我假设我给它的导入路径不正确。

标签: javascriptmarklogicmarklogic-9ml-gradle

解决方案


MarkLogic 服务器不使用 Node.js,因此不知道何时将包安装到 Node.js 实例中。

相反,必须将库的 JavaScript 文件安装在 REST API 实例的模块数据库中。看:

http://docs.marklogic.com/guide/node-dev/extensions

关于 npm 包的一般注意事项...

MarkLogic 中的 Node.js 和 SJS(服务器端 JavaScript)是完全不同的环境:

  • Node.js 是单线程和事件驱动的,提供在 Node.js 进程的生命周期内持久的全局状态。

  • SJS 是并发和事务性的,为每个主模块提供单独的状态,该状态在该主模块的单个同步调用的生命周期内是持久的。

因此,事件包在 SJS 环境中没有用处。

然而,提供在没有事件的情况下运行完成的函数的 JavaScript 库(包括 lodash 以及许多解析器)在 SJS 环境中是可用的。

也可以看看:

http://docs.marklogic.com/guide/jsref/language#id_67900

在特定的问题上,有些人认为 lodash 已在很大程度上被 SJS 支持的 ES6 所取代。

希望有帮助,


推荐阅读