如何使用纯JavaScript运行v1/eval端点

8ehkhllq  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(114)

我想使用/v1/eval端点运行一个第三方提供的JS示例。但是,JS有一些特性需要在使用之前修复。下面是一个示例:
以下脚本执行curl -X POST -d @script.sjs http://host:8000/v1/eval失败,其中script.sjs包含:

javascript=
// Please execute this modified query for me ...
const addNumbers = (a, b) => {
  console.log(`Adding ${a} + ${b}`)
  return a + b
}
addNumbers(2, 3)

当通过curl发送脚本时,脚本被解释为一行,因此会出现很多错误:

  • 单行注解无效
  • 所有行必须以分号结尾(用户可能不提供)
  • 尽管Marklogic支持完整的ES6,但仍不接受某些字符
  • 例如,上述示例中的粗箭头(=>+)失败。

因此,要使脚本运行,我需要对脚本进行大量修改,如下所示:

javascript=
/* Please execute this query for me */
function multiplyNumbers (a, b) {
    console.log(`Adding ${a} + ${b}`);
    return a * b
}
multiplyNumbers(2, 3);

是否有任何curl设置可以防止数据“损坏”?

是否可以使用bash修改脚本内容,以便/v1/eval端点可以正确解释它?

mnemlml8

mnemlml81#

您可以从SJS模块中删除javascript=,让它只是代码,然后将SJS模块的内容作为javascript参数发送,并使用--data-urlencode选项而不是-d,让curl对文件的内容进行urlencode,而不必担心重新格式化或对内容进行urlencode。
curl --anyauth -i -X POST --data-urlencode javascript@script.sjs http://localhost:8000/v1/eval

相关问题