2012-10-31 27 views
9

node.jsを学ぶには、mongoDBに保存されているRSSフィードを取得し、処理し、これらのフィードを(日付順に)作成する小さなアプリを作成しています。速達要求が2回呼び出されました

〜1000のブログアイテムで〜50個のRSSフィードのリストを解析するので、全体を解析するのにかなり時間がかかるので、すべてのフィードを取得して解析するのに十分な時間を得るには、次のように入力してください:req.connection.setTimeout(60*1000);

すべてが正常に実行されますが、要求は2回呼び出されます。 (私はwiresharkでチェックした、私はそれがここのfaviconについてだとは思わない)。

私は本当にそれを取得しません。

ここで自分自身をテストすることができます:http://mighty-springs-9162.herokuapp.com/feed/mde/20( "mde"に関する最後の20個の記事を含むrssフィードを作成する必要があります)。 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関数は2度呼び出されていますが、それでも気にすることはありません。

何が間違っていますか?何か案が?

+0

最も一般的な問題は、どこかにあなたがこんにちは 'mvbl-FSTをreturn' –

+0

を使用するのを忘れ、私はあなたが' '' return'''を忘れることで意味を取得しないということです。もっと説明できますか? –

+0

私は上記について間違っているかもしれません。このコードでは、何も2回実行するように目立たない(favicon.icoは例外ですが、あなたはそれが問題にならないと言っています)。私が行う唯一のことは 'return findTopicByName(name、callback);'です。しかし、それが助けにならないことは確かです。 –

答えて

9

これは私を長い間悩ませました。 Firebugの拡張機能が、バックグラウンドで各GETリクエストの複製を送信している可能性が最も高いです。それが問題ではないことを確認するためにFirebugをオフにしてみてください。

+0

これは私の場合でも問題でした。 http:// localhost:3000/tracksへのGETリクエストが一度呼び出され、http:// localhost:3000/tracks/postへのGETリクエストが2回呼び出されました。 Firebug(Chrome)の電源を切ったときに、2回目のリクエストも一度呼び出されました。 –

+0

これは私にも起こりましたが、クロムの開発ツールで起こりました。私は理由を理解しようとしている私の髪を引っ張っていた。 – Jeffpowrs

+0

私は同じ問題があり、それは間違いなく火かき棒ではありません。これは、私の要求が2回呼び出されたので、リクエスト応答時間に何らかの形で関係しています。これは、3〜4分後に多くのコンピューティングを実行し、応答を送信するためです。そして、私はただの計算が必要なく速く応答すれば、2番目のリクエストは発生しません。 – user619271

1

さらにタイムアウトを長くする必要があるかもしれません。私は明示的なソースを見ていないが、ただタイムアウトしたときに聞こえる、それは再試行する。

2

サイトにfaviconがある場合は、削除してもう一度やり直してください。問題が解決した場合は、ファビコンのURLをリファクタリングしてください

0

同じ問題が発生しました。その後、私はリターンを追加しようとしたが、うまくいかなかった。しかし、リターンres.redirect( '/ path')を追加すると動作します。

2

私は多かれ少なかれ同じことをしていて、同じことに気づいています。

私はこのようにクロムにおけるAPIアドレスを入力して、私のサーバーをテストしています:

http://127.0.0.1:1337/links/1

私のNode.jsサーバは、その後、IDに応じて、JSONオブジェクトに応答しています。

getメソッドでコンソールログを設定し、chromeのアドレスバーのidを変更すると、要求を送信してから(実際に要求を送信するためにenterを押す前に)、サーバーはI実際に入力してください。これは、Chromeの開発コンソールを開いている場合としない場合で発生します。

IE 11は同じように動作するようには見えませんが、Firefoxは現在インストールされていません。これは古いスレッド:)

/Jのようなものであっても、誰かを助け

希望

私は、私はそれが解決OWとしなければならないと考えていエクスプレス4でこれをやって同じ問題を持っていた
0

リクエストパラメータ。その解決方法は、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') 
    } 

}) 
関連する問題