2015-11-16 7 views
9

Expressミドルウェアでノードサーバーを設定しました。約10の他のロード(js、cssなど)をトリガーするHTMLファイルをロードすると、一部のファイルでECONNABORTEDエラーがランダムにになります。正確なエラーは次のとおりです。(私は問題をデバッグしようとした後)、この単純化されたコードによって生成さExpress/NodeでsendFileを使用するとランダムな「ECONNABORTED」エラーが発生する

{ [Error: Request aborted] code: 'ECONNABORTED' } 

res.sendFile(res.locals.physicalUrl,function (err) { 
    if (err) 
     console.log(err); 
    ... 
    } 

多くの記事が完全なパス名を指定していないから生じるこのエラーについて話しています。それはここの状況ではありません。私は完全なパスを指定し、実際にはエラーはランダムに生成されます。ページとそれに続くすべてのリンクが完全に読み込まれていないときがあります。キャッシュをフラッシュしようとしましたが、これを接続するパターンが見つかりませんでした。

この特定のエラーは、ソケット接続の一般的な用語であり、FTPなどの他のアプリケーションのコンテキストで説明されています。

process.env.UV_THREADPOOL_SIZE = 20; 

しかし、私の理解はこれでも不在は、最大でファイル転送を待つ必要はありかもしれないということです。

は、ノードのワーカースレッドを増加させることができることに気づいたので、私が使用してそうしてみましたワーカースレッドは解放され、中止されません。ここで大きなファイルについては言及していません。すべてのファイルは1 MB未満です。

これはノードとはまったく関係がないと感じています。

このエラーを処理する他の可能性(ノードなど)を示してください。また、他の間接的な解決策はありますか?数回再試行すると1つになる可能性がありますが、それは不器用です。編集:いいえ、私は再試行できません。ヘッダーは既にエラーとともに送信されています!

SIDE注:SENDFILEの使用上の 多くの例がそれによって同期呼び出しであるという印象を与えてコールバックを使用してスキップします。そうではない。常にコールバックを使用し、成功を確認してから「次の」ミドルウェアに移動するか、何らかの理由で送信が失敗した場合は適切な手順を実行します。そうしないと、非同期環境での結果をデバッグするのが難しくなる可能性があります。

+0

'res.sendFile'を使用すると、' res.statusCode'が '200'でもいくつかの' ECONNABORTED'を見ました。私は現在のところこれに対する解決策を見出していない。 – paperclip

答えて

2

https://stackoverflow.com/a/36949631/2798152 いくつかのケースでは、あなたがres.sendFile端に非同期呼び出しの前にres.endを呼び出すことにより、接続を終了していた可能性はあるのか?

そうでない場合は、アプリケーションコードを多く貼り付けることができますか?

+1

これは私のために働いています。 'res.end'は' res.download'の前に呼び出されました。 +1 – Avraham

0

MongoDBをアンインストールして再インストールすると、これが解決されました。

私は同じ問題に直面していました。私のラップトップを強制的に再起動しなければならないときに起き始めました。再起動時にnodejsを使用してmongoサーバに接続しようとすると常にECONNABORTEDエラーがスローされます