npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@damien-laurent/http-responses

v1.1.2

Published

A simple library standardizing HTTP responses for an Express app.

Downloads

3

Readme

HTTP RESPONSES

A simple library standardizing HTTP responses for an Express app.

Installation

This is a Node.js module available through the npm registry. Installation is done using the npm install command:

$ npm install express-requests-logger

Usage

// Works with objects
res.ok({ key: "value" });
// => 200 - { key: "value" }

// Works with strings
res.forbidden("You should not be here");
// => 403 - { message: "You should not be here" }

// Works with errors
res.internalServerError(new Error("This is an error message"))
// => 500 - { message: "This is an error message" }

Examples

All examples here.

Use all available responses

const httpResponses = require("@damien-laurent/http-responses");
const express = require("express");
const router = express.Router();

(async () => {
	try {
		// Declare express app
		const application = express();

		// Since express v4.16.0, express.json() replaces bodyparser.json()
		application.use(express.json());

		// Register all HTTP responses
		application.use(httpResponses.all());

		// Add a route
		router.get("/", (req, res) => res.ok({ key: "Great, it works with strings" }));
		router.post("/", (req, res) => res.forbidden("The access to this section is restricted."));

		// Routes: initialize router
		application.use("/", router);

		// Run application
		await application.listen(3000);
	}
	catch (error) {
		console.error(error.message);
	}
})();

Select some of available responses

const httpResponses = require("@damien-laurent/http-responses");
const express = require("express");
const router = express.Router();

(async () => {
	try {
		// Declare express app
		const application = express();

		// Since express v4.16.0, express.json() replaces bodyparser.json()
		application.use(express.json());

		// Register all HTTP responses
		application.use(httpResponses.select(["success.ok"]));

		// Add a route
		router.get("/", (req, res) => res.ok({ key: "Great, it works with strings" }));

		// Routes: initialize router
		application.use("/", router);

		// Run application
		await application.listen(3000);
	}
	catch (error) {
		console.error(error.message);
	}
})();

Create a custom response

const httpResponses = require("@damien-laurent/http-responses");
const express = require("express");
const router = express.Router();

(async () => {
	try {
		// Declare express app
		const application = express();

		// Since express v4.16.0, express.json() replaces bodyparser.json()
		application.use(express.json());

		// Create a custom HTTP response
		const customHttpResponse = httpResponses.custom("serverError", 500, console.log);

		// Register it to application
		application.use(customHttpResponse);

		// Add a route
		router.get("/", (req, res) => {
			try {
				throw new Error("Aie aie");
			}
			catch (error) {
				return res.serverError(error);
			}
		});

		// Routes: initialize router
		application.use("/", router);

		// Run application
		await application.listen(3000);
	}
	catch (error) {
		console.error(error.message);
	}
})();

Available responses

Basically, any response defined here is available.

2xx success

// 200 | OK
res.ok(response payload);

// 201 | Created
res.created(response payload);

// 202 | Accepted
res.accepted(response payload);

// 203 | Non-Authoritative Information (since HTTP/1.1)
res.nonAuthoritativeInformation(response payload);

// 204 | No Content
res.noContent(response payload);

// 205 | Reset Content
res.resetContent(response payload);

// 206 | Partial Content (RFC 7233)
res.partialContent(response payload);

// 207 | Multi-Status (WebDAV; RFC 4918)
res.multiStatus(response payload);

// 208 | Already Reported (WebDAV; RFC 5842)
res.alreadyReported(response payload);

// 226 | IM Used (RFC 3229)
res.imUsed(response payload);

3xx redirection

// 300 | Multiple Choices
res.multipleChoices(response payload);

// 301 | Moved Permanently
res.movedPermanently(response payload);

// 302 | Found (Previously "Moved temporarily")
res.found(response payload);

// 303 | See Other (since HTTP/1.1)
res.seeOther(response payload);

// 304 | Not Modified (RFC 7232)
res.notModified(response payload);

// 305 | Use Proxy (since HTTP/1.1)
res.useProxy(response payload);

// 306 | Switch Proxy
res.switchProxy(response payload);

// 307 | Temporary Redirect (since HTTP/1.1)
res.temporaryRedirect(response payload);

// 308 | Permanent Redirect (RFC 7538)
res.permanentRedirect(response payload);

4xx client errors

// 400 | Bad Request
res.badRequest(response payload);

// 401 | Unauthorized (RFC 7235)
res.unauthorized(response payload);

// 402 | Payment Required
res.paymentRequired(response payload);

// 403 | Forbidden
res.forbidden(response payload);

// 404 | Not Found
res.notFound(response payload);

// 405 | Method Not Allowed
res.methodNotAllowed(response payload);

// 406 | Not Acceptable
res.notAcceptable(response payload);

// 407 | Proxy Authentication Required (RFC 7235)
res.proxyAuthenticationRequired(response payload);

// 408 | Request Timeout
res.requestTimeout(response payload);

// 409 | Conflict
res.conflict(response payload);

// 410 | Gone
res.gone(response payload);

// 411 | Length Required
res.lengthRequired(response payload);

// 412 | Precondition Failed (RFC 7232)
res.preconditionFailed(response payload);

// 413 | Payload Too Large (RFC 7231)
res.payloadTooLarge(response payload);

// 414 | URI Too Long (RFC 7231)
res.uriTooLong(response payload);

// 415 | Unsupported Media Type (RFC 7231)
res.unsupportedMediaType(response payload);

// 416 | Range Not Satisfiable (RFC 7233)
res.rangeNotSatisfiable(response payload);

// 417 | Expectation Failed
res.expectationFailed(response payload);

// 418 | I'm a teapot (RFC 2324, RFC 7168)
res.imATeapot(response payload);

// 421 | Misdirected Request (RFC 7540)
res.misdirectedRequest(response payload);

// 422 | Unprocessable Entity (WebDAV; RFC 4918)
res.unprocessableEntity(response payload);

// 423 | Locked (WebDAV; RFC 4918)
res.locked(response payload);

// 424 | Failed Dependency (WebDAV; RFC 4918)
res.failedDependency(response payload);

// 425 | Too Early (RFC 8470)
res.tooEarly(response payload);

// 426 | Upgrade Required
res.upgradeRequired(response payload);

// 428 | Precondition Required (RFC 6585)
res.preconditionRequired(response payload);

// 429 | Too Many Requests (RFC 6585)
res.tooManyRequests(response payload);

// 431 | Request Header Fields Too Large (RFC 6585)
res.requestHeaderFieldsTooLarge(response payload);

// 451 | Unavailable For Legal Reasons (RFC 7725)
res.unavailableForLegalReasons(response payload);

5xx server errors

// 500 | Internal Server Error
res.internalServerError(response payload);

// 501 | Not Implemented
res.notImplemented(response payload);

// 502 | Bad Gateway
res.badGateway(response payload);

// 503 | Service Unavailable
res.serviceUnavailable(response payload);

// 504 | Gateway Timeout
res.gatewayTimeout(response payload);

// 505 | HTTP Version Not Supported
res.httpVersionNotSupported(response payload);

// 506 | Variant Also Negotiates (RFC 2295)
res.variantAlsoNegotiates(response payload);

// 507 | Insufficient Storage (WebDAV; RFC 4918)
res.insufficientStorage(response payload);

// 508 | Loop Detected (WebDAV; RFC 5842)
res.loopDetected(response payload);

// 510 | Not Extended (RFC 2774)
res.notExtended(response payload);

// 511 | Network Authentication Required (RFC 6585)
res.networkAuthenticationRequired(response payload);

Licence

MIT