Как добавить многострочный безболезненный код в nodejs

#node.js #elasticsearch #elasticsearch-painless

#node.js #elasticsearch #elasticsearch-безболезненный

Вопрос:

Итак, в моем 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>, ';'}]."}}}]},
  

Сначала я попробовал использовать без символа тильды. И затем это также завершается неудачей.
Затем я попытался использовать tilde в начале, что-то вроде:

 var _script = `{                
  

Дело в том, что окончательный json, который будет отправлен в elastic, не показан в приведенном выше коде. Итак, «_script» — это лишь небольшая часть всего json.
Мне было интересно, добавил ли я тильду в самом начале и в конце всего json. Может быть, это могло бы сработать? Мне нужно разобраться, где это находится.
Но только в теории: как вы думаете, проблема есть? Поместить тильду вокруг всего json? Или это что-то другое?

Ответ №1:

Тройка " недопустима в формате JSON, она работает только внутри Elastic stack (т. Е. от 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(" ");
  

Признаю, это не очень разборчиво. Другой способ — использовать сохраненные скрипты, чтобы вы могли просто ссылаться на свой скрипт по идентификатору в Node.js .

Комментарии:

1. Я почти уверен, что это должно было сработать с кодом, заключенным в ` though

2. Я попробовал ` и ваш метод, и оба завершились неудачей. :-/ действительно, «безболезненно».