从字符串化文件中读取节点 Orchestrator 对象并再次使用其函数

Read node Orchestrator object from a stringified file and use its function again

我正在使用 UiPath Orchestrator。这按预期运行。但我现在还想将身份验证减少到单个调用(而不是在请求 odata 时总是进行身份验证)。所以我的想法是将对象写入文件,然后在 odata 请求中读取该对象并重新使用它。

下面的orchestrator对象来自new Orchestrator的构造函数。该对象已准备好使用并具有以下结构(通过 console.log(orchestrator)):

在我的工具中,我需要 odata 的对象函数。所以这有效:

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

我现在想将该对象另存为文件以便能够重新使用它,所以我这样做了:

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

但遗憾的是我得到了错误:

Converting circular structure to 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 对象本身。所以不需要做单一的认证。

我的问题是我将 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});
  });  
});