我正在使用UiPath Orchestrator。这按预期运行。但我现在还想将身份验证减少到单个调用(而不是在请求 时总是进行身份验证odata
)。所以我的想法是将对象写入文件,然后根据odata
请求读取该对象并重新使用它。
以下orchestrator
对象来自 的构造函数new Orchestrator
。此对象已准备好使用,并具有以下结构(通过console.log(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 对象本身。因此无需进行单一身份验证。
我的问题是我把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});
});
});