'use strict' import boom from 'boom' /** * Call the error handler if a middleware function throw an error * * @param {Function} fn original middleware function of the route * @returns {Function} the same middleware function of the route but error handled */ export const asyncMiddleware = fn => (req, res, next) => { Promise.resolve(fn(req, res, next)).catch(err => { // Check whether the error is a boom error if (!err.isBoom) { // The error was not recognized, send a 500 HTTP error return next(boom.internal(err)) } // It is a boom error, pass it to the error handler next(err) }) } // Middleware to handle middleware errors export const errorHandler = (err, req, res, next) => { const { output: { payload } } = err console.error(`Error ${payload.statusCode} - ${payload.error}\n${payload.message}\n`) return res.status(payload.statusCode).json(payload) } /** * Check the request contains all the required parameters * * @param {string[]} requiredParameters list of all required parameters * @param {object} parameters parameters provided in the request (req.query) * @returns {void} */ export const checkRequiredParameters = (requiredParameters, parameters) => { if (!requiredParameters.every(aRequiredParameter => Object.keys(parameters).includes(aRequiredParameter))) throw boom.badRequest(`Missing parameter(s). Required parameters : ${requiredParameters.join(', ')}.`) }