0

指定されたIDで顧客情報を返すサービスがあるとします。見つからない場合はnullを返します。

私のアプリはこのサービスを次のように呼び出します。

http.get('http://myserver/myservice/customer/123', function(res) {
    res.on('data', function(d) {
        callback(null, d);
    });
}).on('error', function(e) {
    callback(e);
});

現在、私のサービスは200で応答しますが、データはありません。

データが返されない場合の処理​​方法を教えてください。

別のhttpコードを返すように変更する必要がありますか?この場合、これをどのように処理しますか?私は多くの異なるアプローチを試みましたが成功しませんでした。

4

3 に答える 3

3

まず、それがデータのストリームであることを覚えておくことが重要resです。現状では、コードはデータのチャンクを使用して複数回呼び出す可能性があります。(新しいデータが着信するたびにイベントが発生します。)メソッドがこの時点まで機能している場合、それは応答が十分に小さいため、応答ペイロードが複数のチャンクに分割されていないためです。callbackdata

作業を楽にするために、HTTP応答本文のバッファリングを処理し、完全な応答を取得できるライブラリを使用してください。npmをすばやく検索すると、リクエストパッケージが表示されます。

var request = require('request');
request('http://server/customer/123', function (error, response, body) {
  if (!error && response.statusCode == 200) {
      callback(null, body);
  } else {
      callback(error || response.statusCode);
  }
});

サービスに関する限り、顧客IDが見つからない場合は、404を返します。実際にそのような顧客がいない場合に200OKを返すことは意味的に無効です。

于 2012-10-17T19:31:46.023 に答える
1

クライアント応答'end'イベントを使用します。

    //...
    res.on('data', function(d) {
        callback(null, d);
    }).on('end', function() {
        console.log('RESPONSE COMPLETE!');
    });
于 2012-10-17T19:27:23.953 に答える
0

私はついに私の問題を解決する方法を見つけました:

http.get('http://myserver/myservice/customer/123', function(res) {
    var data = '';

    response.on('data', function(d) {
        data += d;
    });

    response.on('end', function() {
        if (data != '') {
            callback(null, data);
        }
        else {
            callback('No customer was found');
        } 
    });
}).on('error', function(e) {
    callback(e);
});

これで問題は解決しますが、josh3736の提案を採用し、顧客が見つからない場合はサービスで404を返します。

于 2012-10-17T19:48:41.420 に答える