Marklogic 我可以将amp应用于JavaScript自定义REST端点吗?

Marklogic 我可以将amp应用于JavaScript自定义REST端点吗?,marklogic,Marklogic,我有一个用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

我有一个用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.xqy
metadata.xml
。实际上,我尝试创建了三个AMP,每个文件一个AMP,但它似乎没有授予必要的
xdmp.eval
权限。我一直收到一条错误消息:

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

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

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

  • 正如Mads Hansen在上面指出的,amp需要在文档中的
    post
    方法中,也就是说,amp中的本地名称需要是“post”
  • amp中的文档uri需要指向xqy文档,即使我的端点是JavaScript端点。在本例中,这是
    /marklogic.rest.resource/my endpoint/assets/resource.xqy
    。可以忽略sjs和元数据文档
  • amp中的名称空间需要设置为
    http://marklogic.com/rest-api/resource/my-endpoint

  • 我猜在幕后,MarkLogic通过XQuery包装器执行端点,JavaScript模块的调用方式是.sjs文档上的amp不应用于它。

    您说过您尝试为这三个文档中的每一个创建amp,但amp是一个函数,而不是一个文档。您是否尝试过对REST资源模块的post()函数进行放大?嗯,实际上我已经忘记了,谢谢。我想我发现了问题,这是问题的一部分,但不是全部。发布一个答案来演示解决方法(并接受你的答案)