如何在nodejs中添加多行无痛代码

How to add multiline painless code in nodejs

所以在我的 js 代码中有这一行:

            var _script = {
                _script: {
                    script: {
                        lang: 'painless',
                        source: `
                        """
                        if(1>2){
                            params._source.id;
                        }
                        else{
                            params._source.id;
                        }
                        """
                        `
                    },
                    type: 'string',
                    order: params._source.id
                }
            }

这会失败。我在日志中看到这条错误消息:

,\"reason\":\"unexpected token ['\\"\\n                            if(1>2){\\n                                params._source.id;\\n                            }\\n                            else{\\n                                params._source.id;\\n                            }\\n                            \\"'] was expecting one of [{<EOF>, ';'}].\"}}}]},

我先试过没有波浪字符。然后它也失败了。 然后我尝试在开头使用波浪号,例如:

var _script = `{                

问题是上面的代码中没有显示将发送到 elastic 的最终 json。所以“_script”只是所有json的一小部分。 我想知道我是否在整个 json 的开头和结尾添加波浪号。也许它可以工作?我需要弄清楚它在哪里。 但只是理论上:你认为问题出在那里吗?在所有 json 周围加上波浪号?或者是别的什么?

三元组 " 无效 JSON,它仅适用于 Elastic 堆栈内部(即从 Kibana Dev Tools 到 ES)。

从 Node.js 开始,我通常采用的方法是将每一行添加到一个数组中,然后加入该数组,如下所示:

const code = [];
code.push("if(1>2){");
code.push("params._source.id;");
code.push("} else {");
code.push("params._source.id;");
code.push("}");

source = code.join(" ");

我承认,它不是很清晰。另一种方法是使用 stored scripts 这样您就可以通过 Node.js.

中的 ID 简单地引用您的脚本