javascript - 在 MarkLogic 模块中使用节点模块
问题描述
我正在运行带有公开 REST API 的 Marklogic 服务器。我用自己的资源扩展了 API。这些端点只是文档规定的 .sjs 文件。是否可以在这些 sjs 文件中使用常规节点模块(通过 npm 安装)?
我正在使用 ml-gradle 来部署服务器和端点。我不是要安装 npm 模块的目录。
我尝试做一个 npm install 然后用相对路径导入它
const lodash = require('../node_modules/lodash')
但是,我的 sjs 文件永远找不到这些模块。我假设我给它的导入路径不正确。
解决方案
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 所取代。
希望有帮助,
推荐阅读
- math - 重复填充图案算法(数学)
- java - 有没有办法用参数制作自定义摆动元素方法?
- monit - monit 何时实际启动或重新启动服务
- php - PHP:提交后如何清除表单并显示成功警报?
- excel - 将两个字符串与通配符条件进行比较
- python - 如何从 PDF 文件中提取文本(没有标题)?
- sql - 在 Postgres SQL 函数中将数学表达式声明为变量
- python - 我们如何在 postgresql 中使用 INSERT 和 WHERE
- java - 如何使用 List 或 Hashmap 在 Java 中转换没有 JSON 对象的 JSON 数组
- terraform - Terraform 可以将来自 for_each 循环的变量与字符串连接起来吗