Subscribe to PHP Freaks RSS

Http errors package for Typescript

syndicated from planet-php.net on October 3, 2018

Hacktoberfest 5 has begon, and as my first contribution I wanted to make a tiny Typescript library with HTTP errors.



Whenever I start a new Javascript-based project, whether that’s on the server, or if I’m writing an API client with Fetch, I often find myself doing the same thing over and over again, which is to define a simple set of exceptions representing HTTP errors, like this:



class NotFound extends Error {
   httpStatus = 404;
}


A bit fed up with this, I decided to make a small package that’s just a list of errors for Typescript, along with some tiny utilities.



Example:



import { NotFound } from '@curveball/http-errors';
throw new NotFound('Article not found');


The idea is that the interface is really just this:



export interface HttpError extends Error {
  httpStatus: number;
}


Which means that any error with a httpStatus property automatically follows this pattern, and generic middlewares can be written to listen for them.



It comes with a simple utility function to see if the Error conforms with this pattern:



import { isHttpError } from '@curveball/http-errors';

const myError = new Error('Custom error'); myError.httpStatus = 500;

console.log(isHttpError(myError)); // true


Problem+json



A great idea for emitting errors from a HTTP API is to use the application/problem+json format, defined in RFC7807. The package also contains a few utilities to help with these:



export interface HttpProblem extends HttpError {

type: string | null; title: string; detail: string | null; instance: string | null;

}


Every standard exception that ships with this package also implements this interface. Most properties (except title) default to NULL as they are likely applica

Truncated by Planet PHP, read more at the original (another 3511 bytes)