https://github.com/traviswimer/hapi-route-hierarchy
Hapi plugin that automatically sets up your routes based on your directory hierarchy.
https://github.com/traviswimer/hapi-route-hierarchy
Last synced: about 1 year ago
JSON representation
Hapi plugin that automatically sets up your routes based on your directory hierarchy.
- Host: GitHub
- URL: https://github.com/traviswimer/hapi-route-hierarchy
- Owner: traviswimer
- License: mit
- Created: 2016-11-03T02:14:44.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-11-20T04:09:49.000Z (over 8 years ago)
- Last Synced: 2025-05-15T11:12:40.660Z (about 1 year ago)
- Language: JavaScript
- Size: 11.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-MIT
Awesome Lists containing this project
README
# hapi-route-hierarchy
> Hapi plugin that automatically sets up your routes based on your directory hierarchy.
## What is this?
The purpose of this plugin is to allow intuitive route setup by basing routes on your directory structure. For example, imagine you have a Hapi project with this folder structure:
```
my_hapi_project
│ server.js
│
└───routes
│ login.js
│
└───users
│ group_a.js
│ group_b.js
```
Assume that `server.js` simply starts the Hapi server, after registering the plugin like this:
```javascript
server.register(
{
plugin: require( 'hapi-route-hierarchy' ),
options: {
root: __dirname + '/routes',
glob_pattern: '**/*.js'
}
}, ( err ) => {
// Start the server...
}
)
```
All the files under `/routes` include the data for all the routes. So for example, `/routes/login.js` might look like this:
```javascript
module.exports = {
method: 'GET',
path: '/login',
handler: function( request, h ) {
return h.response( 'You have been authenticated!' );
}
};
```
This will result in a route at `/login`, which is rather boring, but what if we put something similar in `/routes/users/group_a.js`:
```javascript
module.exports = {
method: 'GET',
path: '/group_a',
handler: function( request, h ) {
return h.response( 'Here is a list of all users in group A!' );
}
};
```
This would result in a route at `/users/group_a`.
In this way you can easily keep your routes organized by ensuring they always match your directory structure.
## Plugin Options
### root
- **REQUIRED**
- Type: `string`
- Description: The directory to search for files with route data. This can accept 2 types of paths:
- Relative path from `process.cwd()`
- Absolute path
### glob_pattern
- **REQUIRED**
- Type: `string`
- Description: The [glob](https://www.npmjs.com/package/glob) pattern to use to determine which files should be loaded as route files.
### glob_options
- Type: `object`
- Description: Options that will be passed to the `glob` NPM module. Here is a [full list of available options](https://www.npmjs.com/package/glob#options).
## Route files
The route files can define route data in 3 different ways:
### Object
```javascript
module.exports = {
method: 'GET',
path: '/some_path',
handler: function( request, h ) {
// Do something...
}
};
```
### Array
```javascript
module.exports = [
{
method: 'GET',
path: '/some_path',
handler: function( request, h ) {
// Do something...
}
},
{
method: 'POST',
path: '/some_other_path',
handler: function( request, h ) {
// Do something...
}
}
];
```
### Function
*Note that this variation allows you to access the Hapi server object*
```javascript
module.exports = function( server ){
return {
method: 'GET',
path: '/some_path',
handler: function( request, h ) {
let some_fancy_plugin = request.server.plugins['some_fancy_plugin'];
h.response( some_fancy_plugin.doFancyThings() );
}
};
};
```
## Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality.