OK、Node.JS http.getまたはhttp.requestを使用するときにエラーステータスコードを取得する方法がどこにも見つからないので、私は密集している必要があります。私のコード:
var deferred = $q.defer();
var req = https.get(options, function(response){
var str = '';
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log("[evfService] Got user info: "+str);
deferred.resolve(str);
});
});
req.on('error', function(e){
deferred.reject(e);
});
その「req.on」ビットでは、httpステータスコード(つまり、401、403など)が必要です。私が取得するのは、コードや応答オブジェクトへの参照を提供しない、ほとんど役に立たないエラーオブジェクトです。 function(response)コールバックでインターセプトを試みましたが、404がある場合は呼び出されません。
ありがとう!
サーバーからの応答ステータスコードに関係なくコールバックが呼び出されるため、コールバック内でresponse.statusCode
。つまり、4xxステータスコードは、作業中のレベルではerrorではありません。サーバーが応答しました。リソースが利用できないと言ってサーバーが応答しただけです(など)
これは ドキュメントでは ですが、特徴的にあいまいです。関連するビットを指すコメントとともに、彼らが与える例を示します:
var https = require('https');
https.get('https://encrypted.google.com/', function(res) {
console.log("statusCode: ", res.statusCode); // <======= Here's the status code
console.log("headers: ", res.headers);
res.on('data', function(d) {
process.stdout.write(d);
});
}).on('error', function(e) {
console.error(e);
});
(たとえば)未知のリソースを使用して試してみると、statusCode: 404
。
だからあなたがやっていることのために、あなたはこのようなものが欲しいかもしれません:
var deferred = $q.defer();
var req = https.get(options, function (response) {
var str = '';
if (response.statusCode < 200 || response.statusCode > 299) { // (I don't know if the 3xx responses come here, if so you'll want to handle them appropriately
deferred.reject(/*...with appropriate information, including statusCode if you like...*/);
}
else {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log("[evfService] Got user info: " + str);
deferred.resolve(str);
});
}
});
req.on('error', function (e) {
deferred.reject(/*...with appropriate information, but status code is irrelevant [there isn't one]...*/);
});
エラーコード400の応答は、node.jsではエラーとは見なされません。
response.statusCode
この中:
request.on('response', function (response) {});
エラーコードを取得する方法の非常に小さな例を次に示します。 https
をhttp
に変更してエラーを作成するだけです:
var https = require('https')
var username = "monajalal3"
var request = https.get("https://teamtreehouse.com/" + username +".json", function (response) {
console.log(response.statusCode);
});
request.on("error", function (error) {
console.error(error.status);
});