访问 http 状态代码常量

Accessing http status code constants

本文关键字:常量 代码 状态 http 访问      更新时间:2023-09-26

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

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

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

我正在寻找类似的东西

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

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

对于节点.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)
    });

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

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

你也可以将你感兴趣的那些包装到一个javascript对象中。

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

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

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

这有效...

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
}

您可以单独使用本机http2库,以便使用常量提供 HTTP 状态数值。

示例:打字稿

常量.ts

import { constants } from 'http2'
export const HTTP_STATUS = Object.fromEntries(
  Object.entries(constants)
    .filter(([key]) => key.startsWith('HTTP_STATUS_'))
    .map(([key, value]) => [key.replace('HTTP_STATUS_', ''), value])
)

示例.ts

import { HTTP_STATUS as statusCodes } from './Constants.ts'
// example
const httpStatus = statusCodes.OK // 200 (number)
const httpStatusB = statusCodes.UNAUTHORIZED // 401

示例:JavaScript

常量.js

const http2 = require('http2')
const HTTP_STATUS = Object.fromEntries(
  Object.entries(http2.constants)
    .filter(([key]) => key.startsWith('HTTP_STATUS_'))
    .map(([key, value]) => [key.replace('HTTP_STATUS_', ''), value])
)
module.exports = { HTTP_STATUS }

示例.js

const statusCodes = require('./constants.js').HTTP_STATUS
// example
const httpStatus = statusCodes.OK // 200 (number)
const httpStatusB = statusCodes.UNAUTHORIZED // 401

对于 Angular,请使用:

import { HttpStatusCode } from '@angular/common/http';
console.log(HttpStatusCode.Ok);