如何在Node.js中添加多行无痛代码

时间:2019-03-18 12:11:34

标签: node.js elasticsearch elasticsearch-painless

所以在我的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周围?或者是别的什么?

1 个答案:

答案 0 :(得分:1)

三元组"不是有效的JSON,它仅在弹性堆栈内部起作用(即,从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来简单地引用脚本。