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

odata-禁用 Node.js Orchestrator 的可能缓存以始终返回最新数据

(odata - Disable possible caching of Node.js Orchestrator to return always latest data)

发布于 2021-01-19 08:07:28

我想通过odata. 所以https://uipathspace.com/odata/Robots返回所有机器人。

但是当我更改例如我的机器人描述时:

在此处输入图片说明

并刷新https://uipathspace.com/odata/Robots它正确显示更新的文本:

在此处输入图片说明

但是我使用 node.js Orchestrator 实现创建了一个应用程序。在这里我看不到描述的变化:

在此处输入图片说明

是否有一些硬核缓存,如果有,如何禁用它?我找不到那个设置。

Questioner
kwoxer
Viewed
0
kwoxer 2021-01-20 20:36:17

问题是res.send被放在回调之外。所以它从不等待 REST api 调用的实际完成。

这是它只获取第一个请求的静态结果的基本代码,它从未更新结果:

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

解决的办法是移动res.send({results}); 进入orchestrator.get,那么它正确地重写结果作为它正确地等待回调:

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