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

DHF 6.0.0中SJS向XQuery传递参数失败问题排查

在MarkLogic DHF 6.0.0中从SJS向XQuery传递变量失败的排查思路

这种情况大概率是代码调用时的上下文或语法细节问题,而非DHF 6.0.0的原生Bug——毕竟相同逻辑在QConsole能正常运行。以下是具体排查方向:

  • 检查SJS调用XQuery的语法是否符合DHF运行时要求
    在SJS中调用XQuery模块,要避免依赖全局变量的传递方式,优先通过函数参数明确传值。比如:
    错误写法(依赖全局变量绑定):

    xqueryEval("import module namespace log = 'http://example.com/log'; log:log($myVar)", {myVar: "test"});
    

    正确写法(通过模块函数参数传递):

    const log = require("/ext/log.xqy");
    log.log("test");
    

    DHF Step的运行上下文对全局变量的作用域有严格限制,直接用xqueryEval绑定全局变量可能无法被XQuery模块识别。

  • 验证DHF Step的运行上下文变量范围
    DHF Step的运行环境和QConsole完全不同:QConsole是用户会话上下文,而Step是在模块数据库的隔离上下文运行。要确认你传递的变量是否属于Step的可用范围——比如是否是Step内置的$content、$options变量,还是自定义变量。自定义变量必须在SJS中显式定义并通过函数参数传递,不能依赖隐式上下文。

  • 检查XQuery模块的导入路径和命名空间
    DHF部署后,模块会被放到特定的数据库路径下(如/data-hub/或自定义的/ext/目录)。要确保SJS中require的路径和部署后的实际路径一致,比如本地开发时的src/main/ml-modules/ext/log.xqy,部署后路径是/ext/log.xqy,路径错误会导致模块加载失败,间接引发变量未定义的报错。

  • 确认模块部署完整性
    登录QConsole查看模块数据库(通常为data-hub-MODULES),检查log.xqy是否存在且内容正确。如果部署过程中模块遗漏或内容异常,会导致调用时函数无法识别、变量绑定失败。

  • 测试最小化验证案例
    编写极简测试代码:创建一个只接收单个字符串参数的XQuery函数,在SJS中调用它并传值。如果极简案例能正常运行,说明原代码的复杂逻辑或变量传递方式存在问题;如果极简案例也报错,可尝试升级到DHF 6.x的后续小版本(如6.0.1)验证是否为版本特定Bug。

内容的提问来源于stack exchange,提问作者XCELERENT - I want to dance

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:03