2

NodeJs でEventSourceを使用する際のエラーに関する情報を取得しようとしています。次の例を使用すると、よりよく理解できると思います。

var url = 'http://api.example.com/resource'
var EventSource = require('eventsource');

var es = new EventSource(url);
es.onmessage = function(e) {
   console.log(e.data);
};

es.onerror = function(event) {
   console.log(event);
};

onerror関数では、エラーに関する情報を取得したいのですが、オブジェクトと同様にevent空または未定義esです(このオブジェクトには中かっこのペアが付属しています{})。エラーが発生した場合は、次のような応答ヘッダーを読みたいと思います。

es.onerror = function(e) {
   console.log(e.header.location);
};

これは可能ですか?私は何が欠けていますか?答えは非常に簡単だと思いますが、私は NodeJ の初心者です。

4

1 に答える 1

2

さて、私は数日間解決策を探していましたが、問題を解決しました。まず第一に、私のコードが間違っていた (のドキュメントがEventSource更新されていない) ため、私のコードは次のようになります。

var url = 'http://api.example.com/resource'
var es = new EventSource(url);

es.on('status', function(e) {
    console.log(e.data);
  }).on('result', function(e) {
    console.log(e.data);
  }).on('error', function() {
   console.log('ERROR!');
   es.close()
  });
}); 

したがって、サーバーからの非同期応答はe.dataオブジェクトに配置されます。例は次のようになります。

var url = 'http://api.example.com/resource'
var es = new EventSource(url);

es.on('status', function(e) {
    console.log(e.data);
  }).on('result', function(e) {
    var jsonData = JSON.parse(e.data);
    console.log(e.data, jsonData.url);
  }).on('error', function() {
   console.log('ERROR!');
   es.close()
  });
}); 

エラーに関する情報はまだありませんが、これは EventSource の動作方法によるものです。それらはサーバーからエラーを送り返すのではなく、単に上昇してエラー文字列を返します。彼らはコードにこれを持っています:

if (!res.headers.location) {
    // Server sent redirect response without Location header.
    _emit('error', new Event('error'));
    return;
}
于 2014-10-01T15:09:05.270 に答える