MarkLogic 10:使用/v1/eval端点执行Xquery脚本遇问题求助
MarkLogic /v1/eval 报“No query to eval”错误的解决办法
问题根源
- 请求格式不匹配:你指定了
application/x-www-form-urlencoded类型,但直接传递模块文件内容,MarkLogic无法识别为有效的查询参数。这种Content-Type要求请求体是xquery=模块代码的键值对形式,而非纯代码文本。 - 端点选择可优化:你的模块已经存储在
data-hub-MODULES数据库中,使用/v1/invoke端点直接调用模块URI,比/v1/eval更贴合你的业务场景。
修正方案
方案1:调整/v1/eval的调用方式
如果坚持使用/v1/eval,有两种修正方式:
方式A:保持urlencoded格式,包装为xquery参数
curl --anyauth --user admin:admin -X POST -i \ -d "xquery=$(cat ./test/my-script.xqy)" \ -H "Content-type: application/x-www-form-urlencoded" \ http://localhost:8011/v1/eval
方式B:改用application/xquery类型直接传递代码
curl --anyauth --user admin:admin -X POST -i \ -H "Content-type: application/xquery" \ -H "Accept: application/json" \ --data-binary @./test/my-script.xqy \ http://localhost:8011/v1/eval
方案2:用/v1/invoke直接调用已存储模块
这是更适配你场景的方式,模块已存在于data-hub-MODULES数据库,直接指定URI即可:
curl --anyauth --user admin:admin -X POST -i \ -H "Content-type: application/json" \ -H "Accept: application/json" \ http://localhost:8011/v1/invoke?uri=/test/my-script.xqy
额外注意
- 确认8011端口的应用服务器,其关联的模块数据库确实为
data-hub-MODULES,否则会找不到指定URI的模块。 - 如果需要显式指定执行数据库(即使应用服务器已关联
data-hub-FINAL),可在URL后追加&database=data-hub-FINAL。
内容的提问来源于stack exchange,提问作者Tanner B
相关产品推荐
相关产品推荐

