访问http状态代码常量

时间:2013-09-12 13:37:26

标签: javascript

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

我查看了XMLHttpRequest,但只发现了readyState个常量。

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

我正在寻找像

这样的东西
console.log(xhr.statusCodes.OK); //200

xhr对象显然不存在。

3 个答案:

答案 0 :(得分:6)

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

因此,请访问信誉良好的来源。 wikipedia article应该足够了,因为这不是一个有争议的主题 - 或者,如评论所述,可以找到官方列表here

你也可以将你感兴趣的人包装成一个javascript对象

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

用法可以是if(response == HttpCodes.success){...}

答案 1 :(得分:3)

对于 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]
    });

答案 2 :(得分:2)

这有效...

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
}