快速请求被调用两次

为了学习node.js我创build了一个小应用程序,它获取mongoDB中存储的一些rss提要,处理它们并从这些提要中创build一个单一提要(按datesorting)。

它parsing了大约50个RSS提要的列表,大约有1000个博客项目,所以parsing整个项目是相当长的,所以我把下面的req.connection.setTimeout(60*1000); 得到足够长的时间来获取和parsing所有的提要。

一切运行相当好,但要求被称为两次。 (我用wireshark检查,我不认为这是关于favicon这里)。

我真的不明白。

你可以在这里testing你自己: http : //mighty-springs-9162.herokuapp.com/feed/mde/20 (它应该创build一个rss饲料与最后20篇关于“mde”的文章)。

代码在这里: 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); } 

所以没有什么奇特的,但是,这个getFeed函数被调用两次。

那里有什么问题? 任何想法?

这让我很久没有生气了。 这很可能是在后台发送每个GET请求副本的Firebug扩展。 尝试closuresFirebug,以确保这不是问题。

如果您的网站上有图标,请将其删除并重试。 如果你的问题解决,重构你的图标url

现在我做的或多或less都是一样的东西,并且注意到了同样的事情。

我正在testing我的服务器,通过在chrome中inputapi地址,如下所示:

http://127.0.0.1:1337/links/1

我的Node.js服务器然后响应一个json对象,这取决于id。

我在get方法中设置了一个控制台日志,并注意到当我在chrome的地址栏中更改id时,它会发送一个请求(在实际发送请求之前按下Enter键),服务器在我实际按下Enter键后接受另一个请求。 这种情况发生在没有打开chrome dev控制台的情况下。

IE 11似乎不能以相同的方式工作,但我现在没有安装Firefox。

希望能帮助某人,即使这是一种旧线程:)

/ J

你可能不得不增加超时。 我没有看到明确的源代码,但它听起来超时,它重试。

我遇到了同样的问题。 然后我试图添加回报,它没有工作。 但它工作时,我添加返回res.redirect('/path');

我有同样的问题与Express 4做这件事情。我相信它与解决请求参数有关。 解决的办法是确保你的params是通过例如在一个if块中检查来解决的。

 app.get('/:conversation',(req, res) => { let url = req.params.conversation; //Only handle request when params have resolved if(url){ res.redirect(301, 'http://'+ url + '.com') } })