You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DHF 5部署的JavaScript自定义REST端点应用Amp以获取xdmp.eval执行权限?

如何为DHF部署的REST端点应用Amp以获取xdmp.eval权限

首先,你遇到的核心问题是:REST服务的POST动作默认运行在查询事务模式下,无法直接执行更新操作,而通过xdmp.eval启动新事务需要对应的权限,但直接给生成的三个文件加Amp没生效。其实正确的做法是为resource.sjs模块创建Amp,但要注意配置的细节,下面是具体步骤和要点:

为什么之前的尝试失败?

你尝试给resource.sjs、resource.xqy和metadata.xml都加Amp,但只有resource.sjs是实际处理POST请求的JS模块,另外两个是REST API自动生成的辅助文件,不需要配置Amp。之前失败大概率是Amp的配置参数没设对——比如模块路径不匹配、未关联正确的角色/用户。

正确创建Amp的步骤

1. 确认目标模块的完整路径

DHF部署后,你的端点模块在模块数据库中的路径是:
/marklogic.rest.resource/my-endpoint/assets/resource.sjs
这个路径必须准确无误地写在Amp配置里。

2. 使用XQuery创建Amp

你可以通过Query Console执行以下XQuery代码来创建Amp,授予rest-api-user角色(或你的应用自定义角色)调用xdmp.eval的权限:

xdmp:amp-create(
  "my-endpoint-xdmp-eval-amp",  -- Amp的自定义名称
  "/marklogic.rest.resource/my-endpoint/assets/resource.sjs",  -- 目标模块路径
  "http://marklogic.com/xdmp/privileges/xdmp-eval",  -- 需要的权限URI
  xdmp:role("rest-api-user")  -- 要授予权限的角色,根据实际用户角色调整
)

3. 验证Amp是否生效

创建完成后,你可以通过以下XQuery查询已创建的Amp,确认配置正确:

xdmp:amp-get-all()

检查结果中是否包含你刚创建的Amp,模块路径、权限URI和角色是否完全匹配。

额外注意事项

  • 角色选择:确保你授予Amp的角色是调用该REST端点的用户所拥有的角色(比如如果你的应用用自定义角色,就替换rest-api-user为你的角色名)。
  • xdmp.eval的参数:在你的resource.sjs中调用xdmp.eval时,建议显式指定事务模式为update,避免默认模式的问题:
xdmp.eval(`
  // 你的更新逻辑代码
`, null, {
  transactionMode: "update",
  database: xdmp.database("your-content-db") // 按需指定目标内容数据库
});
  • Amp的修改:如果需要调整Amp配置,可以先删除旧的再创建新的:
xdmp:amp-delete("my-endpoint-xdmp-eval-amp")

关于临时包装器的替代方案

其实不需要额外写包装器,只要正确配置Amp,直接在resource.sjs中调用xdmp.eval就能获取权限。包装器方案只是绕了个弯,不如直接给目标模块加Amp高效。

内容的提问来源于stack exchange,提问作者eaolson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:17:48