В своей работе я использую Hapi и Sequelize, и иногда мои ограничения sequelize (например, уникальные) не работают. Когда это произойдет, вы получите ошибку Boom по умолчанию для внутренних ошибок сервера и код состояния 500, и вот как вы можете преобразовать эти ошибки в ошибки Boom:

Вам нужно сделать только эти две вещи:

  1. Определите ловушку onPreResponse
  2. Преобразуйте ошибку и при необходимости верните новый объект или продолжите предыдущий запрос

Вот как может выглядеть окончательный код:

// Transform non-boom errors into boom ones
server.ext('onPreResponse', (request, reply) => {
  // Transform only server errors 
  if (request.response.isBoom && request.response.isServer) {
    reply(boomify(request.response))
  } else {
    // Otherwise just continue with previous response
    reply.continue()
  }
})

Источник функции boomify:

function boomify (error) {
  // I'm using globals for some things (like sequelize), you should replace it with your sequelize instance
  if (error instanceof Core.db.sequelize.UniqueConstraintError) {
    let be = Boom.create(400, `child "${error.errors[0].path}" fails because ["${error.errors[0].path}" must be unique]`)
    be.output.payload.validation = {
      source: 'payload',
      keys: error.errors.map(e => e.path)
    }
    return be
  } else {
    // If error wasn't found, return default boom internal error
    return Boom.internal('An internal server error', error)
  }
}