1.0.2 • Published 8 years ago

hapi-promise-wrapper v1.0.2

Weekly downloads
1
License
MIT
Repository
github
Last release
8 years ago

Hapi promise wrapper Build Status

Wraps Hapi handlers so they are able to handle returned promises

Installation

npm i hapi-promise-wrapper

Usage

Basic usage

Wrap a single handler for a Hapi server route

  const hpw = require('hapi-promise-wrapper')

  server.route({
    path: '/test',
    method: 'POST',
    handler: hpw(function (req) {
      return Promise.resolve({
        object: {
          value: '1234'
        },
        code: 201,
        headers: {
          'x-something': 'headers'
        }
      })
    })
  })

Avoid wrapping

If you have two or more arguments on your handler wrapping will not be applied, instead you should use reply interface to send the response

  const hpw = require('hapi-promise-wrapper')

  server.route({
    path: '/test',
    method: 'POST',
    handler: hpw(function (req, reply) {
      return reply({ value: '1234' }).code(201)
    })
  })

Response

Payload: { value: '1234' }
Status Code: 201

Handling error

If promise is rejected, error will be sent to reply interface

  const hpw = require('hapi-promise-wrapper')

  server.route({
    path: '/test',
    method: 'POST',
    handler: hpw(function (req) {
      return Promise.resolve(new Error('test'))
    })
  })

Response

Hapi error response

Wrapping a route

As a convenience, you can wrap a route instead of a handler, wrapping a route, will replace given route handler by the wrapped version of the same handler.

  const hpw = require('hapi-promise-wrapper')

  server.route(hpw.wrapRouteHandler({
    path: '/test',
    method: 'POST',
    handler: function (req) {
      return Promise.resolve(new Error('test'))
    }
  })

Valid return values

Object descriptor promise

  hpw(function (req) {
    return Promise.resolve({
      object: {
        value: '1234'
      },
      code: 201,
      headers: {
        'x-something': 'headers'
      }
    })
  })

Response

Payload: { value: '1234' }
Status Code: 201
Headers: { 'x-something': 'headers' }

Object descriptor

  hpw(function (req) {
    return {
      object: {
        value: '1234'
      },
      code: 201,
      headers: {
        'x-something': 'headers'
      }
    }
  })

Response

Payload: { value: '123' }
Status Code: 201
Headers: { 'x-something': 'headers' }

Object value

  hpw(function (req) {
    return {
      test: '123'
    }
  })

Response

Payload: { test: '123' }
Status Code: 200

Primitive value

  hpw(function (req) {
    return '123'
  })

Response

Payload: '123'
Status Code: 200

Running tests

npm test