Node.js jsdom/express 响应缓存?

Node.js jsdom/express response cache?

我正在尝试创建一个 Express 服务器,它使用路径参数来获取数据,然后在 SVG 中呈现。

我的问题是,当使用 REST 客户端对我的路由执行 GET 请求时,我似乎得到了缓存的响应。如果我重新启动我的节点服务器,我会得到我想要的响应:'/:data' 字符串呈现在我的 SVG 中。任何后续请求都只是return我在启动节点服务器后提交的第一个请求参数。

如果我只是 return req.params.data 它会在我每次发出请求时更新,正如我希望的那样;在 SVG 渲染中使用它时它不会更新 - 我的 'rect' 元素保留第一个请求的值。

app.get('/render/:data' controller.render);

Controller.js

exports.render = function(req, res) {

  var output = renderSVG(req.params.data);

  res.send(output);
  res.end();
};

function renderSVG(data) {
  var svg = window.d3.select('body')
    .append('div').attr('id', 'map')
    .append('svg')
    .attr("width", width)
    .attr("height", height);

  svg.append('rect').text(data);

  return window.d3.select('#map').html();
}

我正在使用 D3 和 jsdom 在服务器端呈现 SVG。

我试图通过使用中间件来确保我的响应中绝对没有缓存:

app.use(function noCache(req, res, next) {
  res.setHeader('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-age=0, max-stale=0, post-check=0, pre-check=0');
  res.setHeader("Pragma", "no-cache");
  res.setHeader("Expires", 0);
  next();
});

还是没用。

我怀疑它与 jsdom 有关...

function renderSVG(data) {
  var svg = window.d3.select('body')
    .append('div').attr('id', 'map')
    .append('svg')
    .attr("width", width)
    .attr("height", height);

  svg.append('rect').text(data);

  return window.d3.select('#map').html();
}

这看起来你总是重复使用相同的 window。当您执行 .append('div').attr('id', 'map') 时,您总是向那个 window 添加一个额外的 div,带有一个 id,这将导致您的 window 有多个 div同一个身份证。在这种情况下,select by id 总是 returns 它找到的具有该 id 的第一个元素,导致您总是看到相同的输出。