Warm tip: This article is reproduced from serverfault.com, please click

javascript-从字符串化文件中读取节点 Orchestrator 对象并再次使用其功能

(javascript - Read node Orchestrator object from a stringified file and use its function again)

发布于 2021-01-18 12:26:42

我正在使用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

这是因为 node 包使用的是圆形结构。所以我的想法是使用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 对象并能够再次使用这些功能呢?还是在我的情况下使用记忆工具更有用?

Questioner
kwoxer
Viewed
11
kwoxer 2021-01-20 20:30:01

问题在于 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});
  });  
});