functions.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. 'use strict'
  2. import boom from 'boom'
  3. /**
  4. * Call the error handler if a middleware function throw an error
  5. *
  6. * @param {Function} fn original middleware function of the route
  7. * @returns {Function} the same middleware function of the route but error handled
  8. */
  9. export const asyncMiddleware = fn => (req, res, next) => {
  10. Promise.resolve(fn(req, res, next)).catch(err => {
  11. // Check whether the error is a boom error
  12. if (!err.isBoom) {
  13. // The error was not recognized, send a 500 HTTP error
  14. return next(boom.internal(err))
  15. }
  16. // It is a boom error, pass it to the error handler
  17. next(err)
  18. })
  19. }
  20. // Middleware to handle middleware errors
  21. export const errorHandler = (err, req, res, next) => {
  22. const { output: { payload } } = err
  23. console.error(`Error ${payload.statusCode} - ${payload.error}\n${payload.message}\n`)
  24. return res.status(payload.statusCode).json(payload)
  25. }
  26. /**
  27. * Check the request contains all the required parameters
  28. *
  29. * @param {string[]} requiredParameters list of all required parameters
  30. * @param {object} parameters parameters provided in the request (req.query)
  31. * @returns {void}
  32. */
  33. export const checkRequiredParameters = (requiredParameters, parameters) => {
  34. if (!requiredParameters.every(aRequiredParameter => Object.keys(parameters).includes(aRequiredParameter)))
  35. throw boom.badRequest(`Missing parameter(s). Required parameters : ${requiredParameters.join(', ')}.`)
  36. }