1

APIを使用してサードパーティのWebサイトからニュースフィードを取得するためのこのコードがあります。5秒ごとに実行し、発生する可能性のあるニューストランザクションをプルするように設定されています。問題は、新しいトランザクションが発生しない場合にあるようです。

process.on('uncaught exception'、function(error){console.log( "hmph")})を追加することにより、cronジョブは5秒後に続行できるため、そのままにしておきたくなりました。ただし、console.log( "hmph")をに追加したので、混乱しました。

初めて、コンソールはhmphを書き込みます。5秒後にそれはhmphhmphを書きます

等々。私は何かが欠けているに違いないことを知っていますが、それが何であるかはよくわかりません。elseステートメントでrequest.end()を実行しようとしましたが、それでもエラーが発生します。

process.on('uncaught ...')がないと、スローされるエラーは次のようになります。

events.js:71引数をスローします[1]; //未処理の「エラー」イベント^エラー:TCP.onread(net.js:403:27)のSocket.socketOnData(http.js:1367:20)でエラーを解析します

proccess.on('uncaught ...')を使用すると、console.log(error)は次のようになります。

{[エラー:解析エラー] bytesParsed:161、コード:'HPE_INVALID_CONSTANT'}

このエラーを適切に処理するにはどうすればよいですか?

省略コード:

var job = new cronJob('*/5 * * * * *', function(){
  var request = http.get({
                            host: 'www.example.com',
                            path: '/news_feed?apicode=myapicode',
                            port: 80,
                            headers: { 'accept-encoding': 'gzip' } 
                         })

  request.on('response', function(response){
    if (response.statusCode == 200){
      // gunzip response, save response to mongodb
    } 
    else
    {
      // here is where the error is occuring
      process.on('uncaughtException',function(error){
        console.log(error);
        console.log("hmph");
    }
  });
}, null, true);
4

1 に答える 1

3

リクエストを行うたびに新しいuncaughtExceptionハンドラーをバインドするため、最初のリクエストが送信されると最初のリクエストがバインドされ、失敗するとエラーが出力され、次のリクエストで別のハンドラーが追加されます。それが失敗すると、最初のハンドラーと2番目のハンドラーの両方が実行されます。

エラーを調べ、このタイプのエラーについてここで話し合います:https ://github.com/joyent/node/issues/3354接続しているサーバーがおそらく何か奇妙なことをしているようです。あなたにとって最も簡単な解決策は、おそらく今のところuncaughtExceptionハンドラーを使用することです。とはいえ、それは理想的とは言えず、このような将来の問題に対する一般的な解決策としてそれを行うべきではありません。

var job = new cronJob('*/5 * * * * *', function(){
  var request = http.get({
    host: 'www.example.com',
    path: '/news_feed?apicode=myapicode',
    port: 80,
    headers: { 'accept-encoding': 'gzip' } 
  });
  request.on('response', function(response){
    if (response.statusCode == 200){
      // gunzip response, save response to mongodb
    }
  });
}, null, true);

process.on('uncaughtException',function(error){
  console.log(error);
  console.log("hmph");
});
于 2013-01-18T07:30:36.070 に答える