31

我正在寻找 Javascript 中的 http 状态代码列表。它们是否在任何实现中定义?

我看过XMLHttpRequest,但只找到了readyState常量。

var xhr = new XMLHttpRequest();
console.log(xhr.DONE); //4

我正在寻找类似的东西

console.log(xhr.statusCodes.OK); //200

这显然在 xhr 对象上不存在。

4

4 回答 4

27

对于 node.js,您可以使用模块node-http-status ( github )。

这是一个例子:

var HttpStatus = require('http-status-codes');

response
    .status(HttpStatus.OK)
    .send('ok');

response
    .status(HttpStatus.INTERNAL_SERVER_ERROR)
    .send({
        error: HttpStatus.getStatusText(HttpStatus.INTERNAL_SERVER_ERROR)
    });
于 2015-09-10T15:58:32.687 回答
16

Http 状态代码由 Internet 号码分配机构 (IANA) 维护,而readyState特定于XmlHttpRequest.

因此,只需去一个有信誉的来源。维基百科文章应该足够了,因为这不是一个真正有争议的话题 - 或者,正如评论的那样,官方列表可以在这里找到

您还可以将您感兴趣的内容包装到 javascript 对象中

var HttpCodes = {
   success : 200,
   notFound : 404
   // etc
}

然后可以使用if(response == HttpCodes.success){...}

于 2013-09-12T13:42:26.757 回答
7

对于 Node.js,您可以一起使用httphttp2库。

const statusCodes = require('http').STATUS_CODES;
const httpConstants = require('http2').constants;

response
    .status(httpConstants.HTTP_STATUS_OK)
    .send(statusCodes[httpConstants.HTTP_STATUS_OK]);

response
    .status(httpConstants.HTTP_STATUS_INTERNAL_SERVER_ERROR)
    .send({
        error: statusCodes[httpConstants.HTTP_STATUS_INTERNAL_SERVER_ERROR]
    });
于 2021-03-23T14:56:08.623 回答
6

这有效...

require HTTP = 'http'

使用内置的 HTTP 包,我个人更喜欢通过 NPM 加载包。

  static get HTTP_NAMED_STATUS_CODES()       {
     this._HTTP_NAMED_STATUS_CODES = this._HTTP_NAMED_STATUS_CODES || (() => {
       const httpCodes = {}
       Object.keys(HTTP.STATUS_CODES).forEach((code) => {
         httpCodes[HTTP.STATUS_CODES[code].toUpperCase().replace(/ /g,"_").replace(/-/g,"_").replace(/'/g,"")] = parseInt(code)
       })
       return Object.freeze(httpCodes)
     })();
     return this._HTTP_NAMED_STATUS_CODES
  }

它生成这个...

{
  CONTINUE: 100,
  SWITCHING_PROTOCOLS: 101,
  PROCESSING: 102,
  EARLY_HINTS: 103,
  OK: 200,
  CREATED: 201,
  ACCEPTED: 202,
  NON_AUTHORITATIVE_INFORMATION: 203,
  NO_CONTENT: 204,
  RESET_CONTENT: 205,
  PARTIAL_CONTENT: 206,
  MULTI_STATUS: 207,
  ALREADY_REPORTED: 208,
  IM_USED: 226,
  MULTIPLE_CHOICES: 300,
  MOVED_PERMANENTLY: 301,
  FOUND: 302,
  SEE_OTHER: 303,
  NOT_MODIFIED: 304,
  USE_PROXY: 305,
  TEMPORARY_REDIRECT: 307,
  PERMANENT_REDIRECT: 308,
  BAD_REQUEST: 400,
  UNAUTHORIZED: 401,
  PAYMENT_REQUIRED: 402,
  FORBIDDEN: 403,
  NOT_FOUND: 404,
  METHOD_NOT_ALLOWED: 405,
  NOT_ACCEPTABLE: 406,
  PROXY_AUTHENTICATION_REQUIRED: 407,
  REQUEST_TIMEOUT: 408,
  CONFLICT: 409,
  GONE: 410,
  LENGTH_REQUIRED: 411,
  PRECONDITION_FAILED: 412,
  PAYLOAD_TOO_LARGE: 413,
  URI_TOO_LONG: 414,
  UNSUPPORTED_MEDIA_TYPE: 415,
  RANGE_NOT_SATISFIABLE: 416,
  EXPECTATION_FAILED: 417,
  IM_A_TEAPOT: 418,
  MISDIRECTED_REQUEST: 421,
  UNPROCESSABLE_ENTITY: 422,
  LOCKED: 423,
  FAILED_DEPENDENCY: 424,
  TOO_EARLY: 425,
  UPGRADE_REQUIRED: 426,
  PRECONDITION_REQUIRED: 428,
  TOO_MANY_REQUESTS: 429,
  REQUEST_HEADER_FIELDS_TOO_LARGE: 431,
  UNAVAILABLE_FOR_LEGAL_REASONS: 451,
  INTERNAL_SERVER_ERROR: 500,
  NOT_IMPLEMENTED: 501,
  BAD_GATEWAY: 502,
  SERVICE_UNAVAILABLE: 503,
  GATEWAY_TIMEOUT: 504,
  HTTP_VERSION_NOT_SUPPORTED: 505,
  VARIANT_ALSO_NEGOTIATES: 506,
  INSUFFICIENT_STORAGE: 507,
  LOOP_DETECTED: 508,
  BANDWIDTH_LIMIT_EXCEEDED: 509,
  NOT_EXTENDED: 510,
  NETWORK_AUTHENTICATION_REQUIRED: 511
}
于 2020-08-08T07:51:13.117 回答