A JavaScript library for working with HTTP status codes.
All status codes are taken from the IANA Status Code Registry.
The library works both in the front-end (VanillaJS) and the back-end (NodeJS), supporting a variety of imports. It can also be used as a command-line tool to work with HTTP status codes.
Install it via NPM.
# Local
npm i statushttp
# Global
npm i -g statushttpconst { sc } = require('statushttp');
// Or import { sc } from 'statushttp'; for modules
// Passing case-insensitive text with spaces
console.log(sc('not found').Code); // 404
console.log(sc(201).Desc); // "Created"
// Identifier
console.log(sc(405).Text); // "METHOD_NOT_ALLOWED"- CommonJS
const { statusCode, statusText, ... } = require('statushttp');
- ES6
import { statusCode, statusText, ... } from 'statushttp';
- AMD (require.js)
require(['main.js'], () => { // Assuming path for 'statushttp' configured at 'node_modules/statushttp/statushttp' inside main.js require(['statushttp'], ({ statusCode, statusText, ... }) => { ... }); });
- HTML + VanillaJS
<!-- Minified --> <script src='node_modules/statushttp/statushttp.min.js'></script> <!-- Not minified --> <script src='node_modules/statushttp/statushttp.js'></script> <script> // statusText, statusCode, et cetera, are accessible now. </script>
The following identifiers are used in statushttp to identify
various HTTP statuses.
| Identifier | Code |
|---|---|
| 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 |
| UNUSED | 306 |
| 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 |
| 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 |
| NOT_EXTENDED | 510 |
| NETWORK_AUTHENTICATION_REQUIRED | 511 |
The following objects are accessible from statushttp:
statusCode: Textual identifiers mapped to numeric codes.statusText: Numeric codes mapped to textual identifiers.statusDesc: User-friendly status messages/descriptions.statusClass: Enumerations for status classes.StatusCode: A class implementation for status codes to provide ease in working with status codes.sc: An alias for theStatusCodeclass constructor.
Examples:
console.log(statusCode.NOT_FOUND); // 404
console.log(statusText[502]); // BAD_GATEWAY
console.log(statusDesc[301]); // Moved Permanently
console.log(statusClass.SUCCESS); // 2The StatusCode class provides functionality to facilitate working with HTTP status codes.
The class itself is inherited from String, and behaves as a user-friendly message string by default.
The constructor receives one parameter, which may be a number representing the status code, or the status text (case-insensitive, with or without the hyphens and parentheses).
Examples:
let successStatus = new StatusCode(200);
successStatus = sc(200); // Using the alias
const createdStatus = sc('created');
const continueStatus = sc('ConTinUe');Code: The numerical code for the status.Text: A textual identifier for the status.Desc: A user-friendly status message.Class: The status class enumeration for the status (can be matched fromstatusClassproperties).
Examples:
-
console.log(successStatus.Text); // OK console.log(createdStatus); // Created console.log(createdStatus.Code); // 201 console.log(continueStatus.Desc); // Continue console.log(continueStatus.Class); // 1
statushttp can directly be used from the command-line if installed globally. Alterntively, in a project-specific installation, it may be executed using npx.
statushttp <value> [options] # Global installation
npx statushttp <value> [options] # Local installationThe value here may be a number representing the status code, or the status text (case-insensitive, with or without the hyphens and parentheses).
Even if value contains spaces, it doesn't need to be sent as one parameter enclosed in quotes.
Options:
| Option | Description |
|---|---|
-l, --list |
Show all status codes. |
-?, --help |
Show help. |
-v, --version |
Displays the version. |
Examples:
> statushttp ok
Status Code: 200
Textual Identifier: OK
Message: OK
Class: SUCCESS
> statushttp 304
Status Code: 304
Textual Identifier: NOT_MODIFIED
Message: Not Modified
Class: REDIRECTIONAL
> statushttp temporary redirect
Status Code: 307
Textual Identifier: TEMPORARY_REDIRECT
Message: Temporary Redirect
Class: REDIRECTIONAL
> statushttp 'not found'
Status Code: 404
Textual Identifier: NOT_FOUND
Message: Not Found
Class: CLIENT_ERROR
> statushttp --list
┌──────┬─────────────────────────────────┐
│ Code │ Message │
├──────┼─────────────────────────────────┤
│ 100 │ Continue │
├──────┼─────────────────────────────────┤
│ 101 │ Switching Protocols │
├──────┼─────────────────────────────────┤
│ ... │ ... │
├──────┼─────────────────────────────────┤
│ 510 │ Not Extended │
├──────┼─────────────────────────────────┤
│ 511 │ Network Authentication Required │
└──────┴─────────────────────────────────┘- An Express server:
const express = require('express'); const cors = require('cors'); const { statusCode, statusDesc } = require('statushttp'); const app = express(); app.use(cors()); app.route('/*') .all((req, res) => { res.status(statusCode.NOT_FOUND).end(statusDesc[statusCode.NOT_FOUND]); }); app.listen(5000);
- A React application:
import react, { useState } from 'react'; import axios from 'axios'; import { sc } from 'statushttp'; const App = () => { const [resp, setResp] = useState(null); if (resp == null) { axios.get('http://localhost:5000') .then(r => setResp(r)) .catch(e => setResp(e.response)); } return <h1>{sc(resp?.status || 200)}</h1>; }; export default App;
- Clone the Git repository.
git clone https://github.com/paramsiddharth/statushttp.git
- Install the dependencies.
cd statushttp npm ci - Install the development code as a global module.
npm i -g . - Build the ESM wrapper and the minified form of the development code.
npm run build
- Test the library.
Test with your own values.
npm testTest the minified web version by runningcd tests node test 'service unavailable'
tests/Web.html.
Contributions are welcome via GitHub.
- Raise issues via GitHub.
- Fork the repository.
- Clone the fork.
- Setup the development environment as described above.
- Commit and push changes to the forked repository.
- Create a pull request.