Express请求被调用两次

xav*_*ard 11 http node.js express

要学习node.js,我正在创建一个小应用程序,它可以获取存储在mongoDB中的一些RSS源,处理它们并从这些应用程序创建单个源(按日期排序).

它解析了大约50个RSS源的列表,其中有大约1000个博客项,因此解析整个内容需要很长时间,因此我将以下内容req.connection.setTimeout(60*1000);用于获取和解析所有源的足够长的时间.

一切都运行得很好,但请求被调用两次.(我查看过wireshark,我不认为这是关于favicon的).

我真的不明白.

你可以在这里测试自己:http://mighty-springs-9162.herokuapp.com/feed/mde/20(它应该创建一个rss feed,其中包含有关"mde"的最后20篇文章).

代码在这里:https://github.com/xseignard/rss-unify

如果我们专注于有趣的事情:

我有一个像这样定义的路线: app.get('/feed/:name/:size?', topics.getFeed);

而且topics.getFeed是这样的:

function getFeed(req, res) {
  // 1 minute timeout to get enough time for the request to be processed
  req.connection.setTimeout(60*1000);   

  var name = req.params.name;
  var callback = function(err, topic) {
  // if the topic has been found
  if (topic) {
    // aggregate the corresponding feeds
    rssAggregator.aggregate(topic, function(err, rssFeed) {
      if (err) {
        res.status(500).send({error: 'Error while creating feed'});
      }
      else {
        res.send(rssFeed);
      }
    },
    req);
  }
  else {
    res.status(404).send({error: 'Topic not found'});
  }};
  // look for the topic in the db
  findTopicByName(name, callback);
}
Run Code Online (Sandbox Code Playgroud)

所以没什么特别的,但是,这个getFeed函数被调用了两次.

那有什么不对?任何的想法?

小智 10

这让我很烦恼了很久.Firebug扩展很可能是在后台发送每个GET请求的副本.尝试关闭Firebug以确保不是问题.

  • 我还必须注意,我的请求不是 GET 请求,而是被调用两次的 POST 请求。 (3认同)
  • @user619271 在您的情况下是超时问题。Nodejs 默认有 2 分钟。您可以一般地或根据要求进行调整。 (2认同)

MWa*_*eed 5

我在本地机器上使用Google Cloud Functions Frameworkexpress用于处理请求)时遇到了同样的问题。每个fetch请求(在浏览器控制台和网页内)都会导致对服务器的两个请求。该问题与 CORS 相关(因为我使用了不同的端口),ChromeOPTIONS在实际调用之前进行了方法调用。由于OPTIONS我的代码中不需要方法,所以我使用了一个 if 语句来返回一个空响应。

if(req.method == "OPTIONS"){
    res.set('Access-Control-Allow-Origin', '*');
    res.set('Access-Control-Allow-Headers', 'Content-Type');
    res.status(204).send('');
}
Run Code Online (Sandbox Code Playgroud)

花了将近 3 小时敲我的头。感谢 user105279 的回答暗示这一点。