dotnet-responses

A collection of response classes that mimic ASP.NET responses

Usage no npm install needed!

<script type="module">
  import dotnetResponses from 'https://cdn.skypack.dev/dotnet-responses';
</script>

README

dotnet-responses

A collection of response classes that mimic ASP.NET responses.

npm license downloads

Table of Contents

Install

This is a Node.js module available through the npm registry.

$ npm install dotnet-responses

Basic Usage

Using Objects

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function (req, res) {
    /*
    Call res.send and send the following object to the client:
    {
        "statusCode": 200,
        "message": "Ok",
        "data": null,
        "error": null
    }
    */
    const ok = new Ok({ res });
    ok.send();
});

app.listen(3000);

Using Static Classes

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function (req, res) {
    /*
    Call res.send and send the following object to the client:
    {
        "statusCode": 200,
        "message": "Ok",
        "data": null,
        "error": null
    }
    */
    Ok.send({ res });
});

app.listen(3000);

Importing All Classes

const express = require("express");
const app = express();
const Responses = require("dotnet-responses");

app.get("/ok", function (req, res) {
    /*
    Call res.send and send the following object to the client:
    {
        "statusCode": 200,
        "message": "Ok",
        "data": null,
        "error": null
    }
    */
    Responses.Ok.send({ res });
    
    /*
    Can also do:
    const ok = new Responses.Ok({ res });
    ok.send();
    */
});

app.listen(3000);

Constructors

Classes With a Default Status Code of 100-308

const { Ok } = require("dotnet-responses");
new Ok({
    res,        // Response object from express
    message,    // String (optional)
    data,       // Object or Array (optional)
});

Classes With a Default Status Code of 400-599

const { BadRequest } = require("dotnet-responses");
new BadRequest({
    res,        // Response object from express
    message,    // String (optional)
    data,       // Object or Array (optional)
    error,      // Object (optional)
});

Base Response

const { Response } = require("dotnet-responses");
new Response({
    statusCode, // Number (optional)
    message,    // String (optional)
    data,       // Object or Array (optional)
    error,      // Object (optional)
});

/*
Response has no functions, it just stores the data passed into its constructor

Response's default data:
{
    "statusCode": 200,
    "message": null,
    "data": null,
    "error": null
}
*/

Object Functions

status

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function(req, res)
{
    // Call res.status to set statusCode to 200
    // (This example serves no functional purpose, as Ok has a status code of 200 by default)
    const ok = new Ok({ res });
    ok.status(
        200     // Number
    );
    ok.send();
});

app.listen(3000);

sendStatus

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function(req, res)
{
    // Call res.sendStatus to send response of "Ok" to client
    const ok = new Ok({ res });
    ok.sendStatus(
        200     // Number
    );
});

app.listen(3000);

send

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function(req, res)
{
    /*
    Call res.send and send the following object to the client:
    {
        "statusCode": 200,
        "message": "Ok",
        "data": null,
        "error": null
    }
    */
    const ok = new Ok({ res });
    ok.send(/* No parameters */);
});

app.listen(3000);

json

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function(req, res)
{
    /*
    Call res.json and send the following object to the client:
    {
        "statusCode": 200,
        "message": "Ok",
        "data": null,
        "error": null
    }
    */
    const ok = new Ok({ res });
    ok.json(/* No parameters */);
});

app.listen(3000);

jsonp

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function(req, res)
{
    /*
    Call res.jsonp and send the following object to the client:
    {
        "statusCode": 200,
        "message": "Ok",
        "data": null,
        "error": null
    }
    */
    const ok = new Ok({ res });
    ok.jsonp(/* No parameters */);
});

app.listen(3000);

end

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function(req, res)
{
    // Call res.end
    const ok = new Ok({ res });
    ok.end(/* No parameters */);
});

app.listen(3000);

Static Functions

status

const express = require("express");
const app = express();
const { BadRequest } = require("dotnet-responses");

app.get("/bad-request", function(req, res)
{
    // Call res.status to set statusCode to 400
    // (This example serves no functional purpose, as BadRequest has a status code of 400 by default)
    BadRequest.status({
        res,                                // Response object from express
        statusCode: 400,                    // Number (optional)
    });
    BadRequest.send({ res });
});

app.listen(3000);

sendStatus

const express = require("express");
const app = express();
const { BadRequest } = require("dotnet-responses");

app.get("/bad-request", function(req, res)
{
    // Call res.sendStatus to send response of "Bad Request" to client
    BadRequest.sendStatus({
        res,                                // Response object from express
        statusCode: 400,                    // Number (optional)
    });
});

app.listen(3000);

send

const express = require("express");
const app = express();
const { NotFound } = require("dotnet-responses");

app.get("/*", function(req, res)
{
    /*
    Call res.send and send the following object to the client:
    {
        "statusCode": 404,
        "message": "Not Found",
        "data": {
        "foo": "bar"
        },
        "error": {
            // Info about your error here
        }
    }
    */
    NotFound.send({
        res,                                // Response object from express
        statusCode: 404,                    // Number (optional)
        message: "Not Found",               // String (optional)
        data: { foo: "bar" },               // Object or Array (optional)
        error: new Error("Page not found"), // Object (optional)
    });
});

app.listen(3000);

json

const express = require("express");
const app = express();
const { Ok, UnprocessableEntity } = require("dotnet-responses");

const bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

const { validateMyPayloadAsync } = require("./some-file-for-custom-validation");

app.post("/validation-error", function(req, res)
{
    validateMyPayloadAsync(req.body)
    .then((result) => {
        /*
        Call res.json and send the following object to the client:
        {
            "statusCode": 200,
            "message": "Ok",
            "data": {
                // Info about result here
            },
            "error": {
                // Info about your error here
            }
        }
        */
        Ok.json({
            res,                            // Response object from express
            statusCode: 200,                // Number (optional)
            message: "Ok",                  // String (optional)
            data: result,                   // Object or Array (optional)
            error: new Error("Ok Example"), // Object (optional)
        });
    })
    .catch((err) => {
        /*
        Call res.json and send the following object to the client:
        {
            "statusCode": 422,
            "message": "Unprocessable Entity",
            "data": {
                "foo": "bar"
            },
            "error": {
                // Info about your err here
            }
        }
        */
        UnprocessableEntity.json({
            res,                            // Response object from express
            statusCode: 422,                // Number (optional)
            message: "Unprocessable Entity",// String (optional)
            data: { foo: "bar" },           // Object or Array (optional)
            error: err,                     // Object (optional)
        });
    });
});

app.listen(3000);

jsonp

const express = require("express");
const app = express();
const { BadRequest } = require("dotnet-responses");

app.get("/bad-request", function (req, res) {
    /*
    Call res.jsonp and send the following object to the client:
    {
        "statusCode": 400,
        "message": "Bad Request",
        "data": {
            "foo": "bar"
        },
        "error": {
            // Info about your err here
        }
    }
    */
    BadRequest.jsonp({
        res,                                // Response object from express
        statusCode: 400,                    // Number (optional)
        message: "Bad Request",             // String (optional)
        data: { foo: "bar" },               // Object or Array (optional)
        error: new Error("Bad Request"),    // Object (optional)
    });
});

app.listen(3000);

end

const express = require("express");
const app = express();
const { Ok } = require("dotnet-responses");

app.get("/ok", function (req, res) {
    // Call res.end
    Ok.end({
        res,                                // Response object from express
    });
});

app.listen(3000);

List of Classes

Format of List

  • statusCode: ClassName

100s

  • 100: Continue
  • 101: SwitchingProtocols
  • 102: Processing

200s

  • 200: Ok
  • 200: Success
  • 201: Created
  • 202: Accepted
  • 203: NonAuthoritativeInformation
  • 204: NoContent
  • 205: ResetContent
  • 206: PartialContent
  • 207: MultiStatus
  • 208: AlreadyReported
  • 226: IMUsed

300s

  • 300: MultipleChoices
  • 301: MovedPermanently
  • 302: Found
  • 303: SeeOther
  • 304: NotModified
  • 305: UseProxy
  • 307: TemporaryRedirect
  • 308: PermanentRedirect

400s

  • 400: BadRequest
  • 401: Unauthorized
  • 403: Forbidden
  • 404: InvalidUrl
  • 404: NotFound
  • 405: MethodNotAllowed
  • 406: NotAcceptable
  • 407: ProxyAuthenticationError
  • 408: RequestTimeout
  • 409: Conflict
  • 410: Gone
  • 411: LengthRequired
  • 412: PreconditionFailed
  • 413: RequestEntityTooLarge
  • 414: RequestUriTooLong
  • 415: UnsupportedMediaType
  • 416: RequestedRangeNotSatisfiable
  • 417: ExpectationFailed
  • 422: UnprocessableEntity
  • 422: ValidationError
  • 423: Locked
  • 424: FailedDependency
  • 426: UpgradeRequired
  • 428: PreconditionRequired
  • 429: TooManyRequests
  • 431: RequestHeaderFieldsTooLarge
  • 444: NoResponse
  • 449: RetryWith
  • 451: UnavailableForLegalReasons
  • 499: ClientClosedRequest

500s

  • 500: InternalServerError
  • 501: NotImplemented
  • 502: BadGateway
  • 503: ServiceUnavailable
  • 504: GatewayTimeout
  • 505: HttpVersionNotSupported
  • 506: VariantAlsoNegotiates
  • 507: InsufficientStorage
  • 508: LoopDetected
  • 509: BandwidthLimitExceeded
  • 510: NotExtended
  • 511: NetworkAuthenticationRequired
  • 598: NetworkReadTimeoutError
  • 599: NetworkConnectTimeoutError

Base

  • Response

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

MIT