Hapi-405-Routes
Plugin for Hapi.js to include 405 Method Not Allowed Responses on routes for a given set of methods.
Overview
This plugin registers additional routes with your hapi service for routes with specific methods not implemented.
Say you have a farming web service has an api with only 2 routes:
GET /farm/goats
POST /farm/goats
By default, hapi responds with a 404 if there is not route/method match registered with the service. If a user were to request OPTIONS /farm/goats
they would get a 404 response.
This plugin builds additional routes based on the route paths already implemented which will respond with a 405 status code. Using this plugin and requesting OPTIONS /farm/goats
will respond with a 405 Method Not Allowed.
Additionally the 405 routes can be configured to respond with an allow
header specifying which methods are allowed for the requested route path. See [options](# Options) below.
Installing
This plugin is available through an npm module.
npm install hapi-405-routes
Usage
This plugin must be registered after the implemented routes have already been registered with the service.
server.route(routes);
server.register([
{
register: require('hapi-405-routes'),
options: {
methodsToSupport: ['GET', 'DELETE', 'PATCH', 'POST', 'OPTIONS'],
setAllowHeader: true,
log: true
}
}
]);
Options
This plugin supports 4 options passed in during plugin registration: methodsToSupport
, setAllowHeader
, allowHeadWithGet
, and log
.
methodsToSupport
- Data Type:
Array<String>
- Defaults:
['GET', 'POST', 'DELETE', 'PUT', 'PATCH', 'OPTIONS', 'TRACE']
- Description: This option specifies which methods should respond with a 405 status code: "Method Not Allowed" if not already implemented.
log
- Data Type:
Boolean
- Defaults:
false
- Description: Enables plugin logging
- Data Type:
Boolean
- Defaults:
false
- Description: Sets an
allow
header with each 405 response containing the methods implemented for the related route path.
allowHeadWithGet
- Data Type:
Boolean
- Defaults:
false
- Description: Includes
HEAD
with the allow header if a GET
method is implemented for the related route path. (Hapi does not natively support HEAD
methods)