Прочитать объект Orchestrator узла из строкового файла и снова использовать его функцию

Я использую UiPath Orchestrator. Это работает, как ожидалось. Но теперь я дополнительно хочу сократить аутентификацию до одного вызова (вместо того, чтобы всегда выполнять аутентификацию при запросе odata). Итак, моя идея заключалась в том, чтобы записать объект в файл и по запросу odata прочитать этот объект и повторно использовать его.

Следующий объект orchestrator происходит от конструктора new Orchestrator. Этот объект готов к использованию и имеет следующую структуру (через console.log(orchestrator)):

Структура объекта Orchestrator

В моем инструменте мне нужны объектные функции odata. Итак, это работает:

console.log(orchestrator['v2']['odata']);

Теперь я хочу сохранить этот объект как файл, чтобы иметь возможность использовать его повторно, поэтому я сделал:

fs.writeFileSync('./data.json', orchestrator, 'utf-8')

Но, к сожалению, получаю ошибку:

Преобразование круговой структуры в JSON

Это подразумевается, поскольку пакет узлов использует циркулярную структуру. Поэтому я решил использовать пакет circular-json, чтобы исправить эту проблему:

const {parse, stringify} = require('circular-json');
...
var savetofile = stringify(orchestrator);
...
var readfromfile = parse(savetofile);
...
console.log(readfromfile['v2']['odata']);

Но, к сожалению, readfromfile['v2']['odata'] больше не доступен. Причина в том, что stringify(orchestrator) уже слишком сильно сокращает:

Строковая структура объекта Orchestrator

Итак, как мне добиться того, чтобы я мог читать объект Orchestrator из файла и снова использовать функции? Или в моем случае полезнее использовать запоминающее устройство?


person kwoxer    schedule 18.01.2021    source источник
comment
Пожалуйста, показывайте текстовые данные как текст, а не как изображения текста.   -  person Heretic Monkey    schedule 18.01.2021
comment
По сути, вы не можете сериализовать функции. Вам нужно будет создать новый объект и установить для него те же данные, что и данные, которые вы сохранили в файле.   -  person Heretic Monkey    schedule 18.01.2021
comment
Отвечает ли это на ваш вопрос? Как сохранить функцию javascript в JSON   -  person Heretic Monkey    schedule 18.01.2021
comment
Я знаю, что обычно лучше использовать чистый текст вместо изображений. Но в этом случае он лучше показывает структуру изображений. Прочтите статью по ссылке. Что ж, это будет означать массу работы. Хорошо, я посмотрю, решит ли это мою проблему. Так что, может быть, я найду способ, чтобы он хоть как-то работал в памяти.   -  person kwoxer    schedule 18.01.2021


Ответы (1)


Проблема была не в самом объекте Orchestrator. Таким образом, нет необходимости выполнять однократную аутентификацию.

Моя проблема заключалась в том, что я поставил res.send вне обратного вызова. Таким образом, он никогда не ждал фактического завершения вызова REST api.

Это был базовый код, в котором он просто брал статический результат первого запроса, он никогда не обновлял результаты:

app.get('/jobs', function (req, res) {
  ...
  var orchestrator = require('./authenticate');
  var results = {};
  var apiQuery= {};
  orchestrator.get('/odata/Jobs', apiQuery, function (err, data) {
    for (row in data) {
      results[i] = 
        { 
          'id' : row.id,
          ...
        };
    }
  });  
  return res.send({results});
});

Решение состоит в том, чтобы переместить res.send({results}); в orchestrator.get, после чего он правильно перезаписывает результаты, поскольку правильно ожидает обратного вызова:

app.get('/jobs', function (req, res) {
  ...
  var orchestrator = require('./authenticate');
  var results = {};
  var apiQuery= {};
  orchestrator.get('/odata/Jobs', apiQuery, function (err, data) {
    for (row in data) {
      results[i] = 
        { 
          'id' : row.id,
          ...
        };
    }
    return res.send({results});
  });  
});
person kwoxer    schedule 20.01.2021