首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >http get NodeJS如何获取错误状态码?

http get NodeJS如何获取错误状态码?
EN

Stack Overflow用户
提问于 2014-05-17 22:23:17
回答 3查看 89.1K关注 0票数 48

好吧,我一定是笨手笨脚的,因为我在任何地方都找不到在使用Node.JS http.gethttp.request时如何获取错误状态代码。

My code:

代码语言:javascript
复制
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等)。我得到的是一个半无用的error对象,它没有给我代码或对response对象的任何引用。

我尝试过在函数(响应)回调中拦截,但当有一个404时,它永远不会被调用。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2014-05-17 22:32:14

无论来自服务器的响应状态代码如何,您的回调都会被调用,因此在您的回调中,请检查response.statusCode。也就是说,4xx状态码在您正在工作的级别上不是错误;服务器响应,只是服务器的响应是资源不可用(等等)。

这是in the documentation,但其特点是模糊不清。这是他们给出的例子,并有一个指向相关部分的注释:

代码语言:javascript
复制
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

因此,对于您正在做的事情,您可能需要这样的东西:

代码语言:javascript
复制
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
        response.on("data", function() { } ); // ¹
        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]...*/);
});

?处理非正常状态代码分支中的空data事件处理程序存在,因为文档中有以下说明:

...if如果添加了'response'事件处理程序,则必须通过在发生'readable'事件时调用response.read()、通过添加'data'处理程序或通过调用.resume()方法来使用响应对象中的数据。在使用数据之前,不会触发'end'事件。此外,在读取数据之前,它将消耗内存,这最终会导致“进程内存不足”错误。

因为我们将一个函数传递给https.get,所以我们挂接了'response'事件,这表明我们需要做其中的一件事(在本例中,我添加了一个不做任何事情的data处理程序)。感谢指出了这一点!

票数 62
EN

Stack Overflow用户

发布于 2014-05-17 22:33:21

错误代码400响应不会被node.js视为错误。

在下面的代码中尝试response.statusCode

代码语言:javascript
复制
request.on('response', function (response) {}); 
票数 15
EN

Stack Overflow用户

发布于 2016-06-10 05:26:37

下面是一个很小的获取错误代码的例子。只需将https更改为http并创建一个错误:

代码语言:javascript
复制
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);
});
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23712392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档