【问题标题】:Can I apply an amp to a JavaScript custom REST endpoint?我可以将放大器应用到 JavaScript 自定义 REST 端点吗?
【发布时间】:2021-06-09 15:45:04
【问题描述】:

我有一个用 JavaScript 编写的自定义 REST 端点。在 JavaScript 扩展中,POST 操作以查询模式运行,因此它们无法更新数据,因此我需要使用 xdmp.eval 启动一个新事务,这意味着我需要对 xdmp.eval 的执行权限。 如何将 amp 应用到 JavaScript 扩展?

我正在通过 DHF 5 部署端点,因此它位于 src/main/ml-modules/services/my-endpoint.sjs。部署后,在模块数据库中,/marklogic.rest.resource/my-endpoint/assets/resource.sjs 已创建,还有resource.xqymetadata.xml。我实际上尝试创建三个放大器,每个文件一个,但它似乎没有授予必要的xdmp.eval 权限。我不断收到错误消息:

SEC-PRIV: xdmp.eval(...) -- Need privilege: http://marklogic.com/xdmp/privileges/xdmp-eval

作为一种解决方法,我想我可以为对xdmp.eval 的调用编写一个包装器,并在其上创建一个放大器。我只是想知道是否可以直接放大端点。

【问题讨论】:

  • 您说您尝试为这三个文档中的每一个创建 AMP,但您 AMP 是一个函数,而不是文档。您是否尝试过 AMPing REST 资源模块的 post() 函数?
  • 嗯,其实我已经忘记了,所以谢谢。我想我发现了问题,这是其中的一部分,但不是全部。
  • 发布一个演示修复的答案(并接受您的答案)

标签: marklogic


【解决方案1】:

我想我已经找到了正确的方法。

  1. 正如上文Mads Hansen所指出的,amp需要在文档中的post方法上,即amp中的本地名称需要为“post”。
  2. amp 中的文档 uri 需要指向 xqy 文档,即使我的端点是 JavaScript 端点。在这种情况下,就是/marklogic.rest.resource/my-endpoint/assets/resource.xqy。 sjs 和元数据文档可以忽略。
  3. 需要将放大器中的命名空间设置为http://marklogic.com/rest-api/resource/my-endpoint

我猜想在幕后 MarkLogic 通过 XQuery 包装器执行端点,并以 .sjs 文档上的 amp 未应用到它的方式调用 JavaScript 模块。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 2018-10-20
  • 2021-08-14
  • 2021-01-02
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多