1.1.0 • Published 4 years ago

be-hapi v1.1.0

Weekly downloads
4
License
MIT
Repository
github
Last release
4 years ago

be-hapi

CircleCI npm version Dependencies devDependencies Known Vulnerabilities

NPM

Decorated class-based controllers for Hapi with IoC support (like InversifyJS).

Installation

You can get latest release with type definitions from NPM:

npm install be-hapi reflect-metadata --save

be-hapi requires TypeScript >= 2.0 and the experimentalDecorators, lib and types compilation option.

{
    "compilerOptions": {
        "target": "es5",
        "lib": ["es6"],
        "types": ["reflect-metadata"],
        "module": "commonjs",
        "moduleResolution": "node",
        "experimentalDecorators": true
    }
}

Usage

Very basic usage:

1. Create your first controller class

//controller.ts
import { controller, get, param } from 'be-hapi'

@controller()
class HelloController {

  @get('/{name?}')
  public index(
    @param('name', 'You') name: string
  ) {
    return `Hi, ${name}!`
  }

}

2. Register the plugin with Hapi

// server.ts
import { Server } from '@hapi/hapi' 
import beHapi from 'be-hapi'

// import previously created controller
import './controller'

(async () => {
    const server = new Server({ port: 3000 })
    await server.register(beHapi)
    await server.start()
})()

Now, compile, start the app and go to http://localhost:3000/.

More examples

API

Plugin options

NameTypeDescription
registerController(controller: ControllerConstructor) => voidFunction called on controller registration. Called once for each discovered controller.
controllerFactory(controller: ControllerConstructor) => objectFunction called that should return instance of controller. Called on each request to the controller. If not specified, returns new instance of controller class.

Available decorators

NameTargetDescription
@controller(basePath?, baseRouteSpec?)ClassDecorates controller class. Can specify base path prefix and base route spec for all routes of the controller.
@route(routeSpec)Method, Class*Sets route spec.
@path(path)Method, Class*Sets path for the route.
@method(httpMethod)Method, Class*Sets HTTP method (eg. GET, POST...)
@get(path?)Method, Class*Sets HTTP method to GET. Optionally set path for the route.
@post(path?)Method, Class*Sets HTTP method to POST. Optionally set path for the route.
@put(path?)Method, Class*Sets HTTP method to PUT. Optionally set path for the route.
@patch(path?)Method, Class*Sets HTTP method to PATCH. Optionally set path for the route.
@del(path?)Method, Class*Sets HTTP method to DELETE. Optionally set path for the route.
@options(path?)Method, Class*Sets HTTP method to OPTIONS. Optionally set path for the route.
@all(path?)Method, Class*Sets HTTP method to *. Optionally set path for the route.
@vhost(hostOrHosts)Method, Class*Sets virtual host.
@rules(rules)Method, Class*Sets custom rules.
@routeOptions(options)Method, Class*Sets route options.
@routeOption(name, value)Method, Class*Sets single route option.
@cache(value)Method, Class*Sets cache option. See route option.
@cors(value)Method, Class*Sets cors option. See route option.
@description(value)Method, Class*Sets description option. See route option.
@notes(value)Method, Class*Sets notes option. See route option.
@pre(value)Method, Class*Sets pre option. See route option.
@response(value)Method, Class*Sets response option. See route option.
@security(value)Method, Class*Sets security option. See route option.
@tags(value)Method, Class*Sets tags option. See route option.
@validate(value)Method, Class*Sets validate option. See route option.
@plugin(name, options)Method, Class*Sets plugin options. See route option.
@param(name,defaultValue?)Method parameterInject specified request param.
@queryParam(name,defaultValue?)Method parameterInject specified request query param.
@cookie(name,defaultValue?)Method parameterInject specified request cookie value.
@payload(name?,defaultValue?)Method parameterInject request payload. If name would be specified, only requested property from payload will be injected.
@request(), @req()Method parameterInject request object.
@responseToolkit(), @res()Method parameterInject response toolkit object.

Footnotes:

Class* - you can decorate controller with method decorators to set base route specification for all routes in decorated controller.

Helpers

useInversify(container) - returns plugin options to easy integrate InversifyJS. See example.