为什么撇号不断发出 POST 调用来检查用户是否登录?

Why does apostrophe keep making POST calls to check if user logged in?

有一堆 POST 从网站到服务器的调用,我不知道如何关闭它们。

2019-10-24T21:24:49.606Z - info: admin already logged in. Passing through...
2019-10-24T21:25:09.767Z - info: /modules/apostrophe-notifications/poll-notifications
2019-10-24T21:25:09.768Z - info: admin already logged in. Passing through...
2019-10-24T21:25:29.911Z - info: /modules/apostrophe-notifications/poll-notifications
2019-10-24T21:25:29.912Z - info: admin already logged in. Passing through...
2019-10-24T21:25:50.023Z - info: /modules/apostrophe-notifications/poll-notifications
2019-10-24T21:25:50.024Z - info: admin already logged in. Passing through...

这一直在继续...

在我的 app.js 文件中,我已将 longPollingTimeout 选项设置为 0,但它并没有停止,当我将其设置为 20000 ms 它每 20 秒发送一次。

var apos = Mongo.getMongoPw().then(function(mongoPw){
  return require('apostrophe')({
    ...
    modules: {
      ...
      'apostrophe-notifications': {
        longPollingTimeout: 20000
      },
      ...
    }
  });

在我们发送到 splunk 的日志中,它似乎毫无意义而且是垃圾邮件。

如果不需要,如何关闭它?

您所说的 API 是轮询通知,可以通过服务器端或浏览器端代码随时发送通知。例如,如果您在浏览器控制台中尝试这样做:

apos.notify('Oh no!', { type: 'error' });

您会收到一条通知,该通知会一直持续到关闭(它存储在服务器端)。

当它们在服务器端发送时,这变得更有用。例如,您的服务器端 javascript 也可能会说:

if (req.user) {
  // server side you must include req
  apos.notify(req, 'Oh no!', { type: 'error' });
}

现在,通知迟早会到达当前登录的用户,您无需考虑如何发送;它只是通过轮询通知为您处理。这在长 运行 任务中非常有用。如果不启用此功能,Apostrophe 将无法向用户发送许多必要的消息。

但是,您想知道为什么会在日志中收到这条烦人的消息:

admin already logged in. Passing through...

我已经检查了撇号核心模块和撇号工作流模块。两者都不包含任何此类消息。我还使用 github 搜索来检查整个 apostrophecms 组织以查找此消息,但没有出现。 github 范围内的搜索也是如此。我遗漏了 "admin" 这个词,并且在 apostrophecms 组织中,还尝试单独搜索 "passing through" 而没有出现任何代码。

所以这表明您的自定义代码或您添加到项目中的另一个 npm 模块包含自定义中间件,该中间件会在收到的每个请求上记录此消息。我建议关闭该中间件,因为它是没有必要在每次通知投票中报告这一点。