Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/winston0410/better-fastify-405

A better plugin for handling 405 in Fastify.
https://github.com/winston0410/better-fastify-405

fastify fastify-405 fastify-plugin

Last synced: about 1 month ago
JSON representation

A better plugin for handling 405 in Fastify.

Awesome Lists containing this project

README

        

# Better Fastify 405

A simple and fully customizable Fastify plugin for handling 405 gracefully.

[![Maintainability](https://api.codeclimate.com/v1/badges/23557cfcd9416cc4f098/maintainability)](https://codeclimate.com/github/winston0410/better-fastify-405/maintainability) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/a88113b4d6ac4acbb90be5864aacae27)](https://www.codacy.com/gh/winston0410/better-fastify-405/dashboard?utm_source=github.com&utm_medium=referral&utm_content=winston0410/better-fastify-405&utm_campaign=Badge_Grade) [![Test Coverage](https://api.codeclimate.com/v1/badges/23557cfcd9416cc4f098/test_coverage)](https://codeclimate.com/github/winston0410/better-fastify-405/test_coverage)

## Why do I need this?

By default [Fastify suppress error 405](https://github.com/fastify/fastify/issues/917) and with return 404 instead. A 405 error would improve the development experience.

[fastify-405](https://github.com/Eomm/fastify-405) was built to solve this issue, but it requires you to input a RegExp for the route you want to handle 405.

This plugin is meant to read from your current route setting, and create routes that return 405 automatically.

## Installation

```shell
npm add better-fastify-405
```

```shell
yarn add better-fastify-405
```

## Usage

```javascript
//app.js
import fastify, { FastifyRequest, FastifyReply, FastifyInstance, HookHandlerDoneFunction, RouteOptions } from 'fastify';

const app: FastifyInstance = fastify({
logger: true
})

//Other plugins
app.register(import("fastify-etag"))
app.register(import('plugins/better-fastify-405'), {
routes: [
//Required.
//Register all your route here, or else this plugin would not work.
import('./routes/index'),
import('./routes/protected')
//All the route will be registered inside the plugin. Do not use app.register() here.
],
filterCallback: ({ route, method }) => {
// Optional
// A callback to allow you filter out specific route and specific method from assigning it to 405

//Route: route registered
//Method: method available to apply 405
return true
}
})
```

### Do not mark `OPTIONS` route with 405

A function `allowCORS` is provided to help you not mark `OPTIONS` for 405.

```javascript
import better405, { allowCORS } from 'better-fastify-405'

import fastify, { FastifyRequest, FastifyReply, FastifyInstance, HookHandlerDoneFunction, RouteOptions } from 'fastify';

const app: FastifyInstance = fastify({
logger: true
})

//Other plugins
app.register(import("fastify-etag"))
app.register(better405, {
routes: [
import('./routes/index'),
import('./routes/protected')
],
filterCallback: allowCORS
})
```