UNPKG

@mark01/express-utils

Version:

npm package that contains utilities for express.js

53 lines (52 loc) 1.74 kB
import { AppError } from '../error'; export const promiseController = (schemas, cb, successStatusCode = 200) => async (req, res, next) => { const requestErrors = []; const requestData = { params: {}, body: {}, query: {}, }; if (schemas.params) { const parsedParams = schemas.params.safeParse(req.params); if (parsedParams.success) { requestData.params = parsedParams.data; } else { requestErrors.push({ type: 'Params', errors: parsedParams.error }); } } if (schemas.body) { const parsedBody = schemas.body.safeParse(req.body); if (parsedBody.success) { requestData.body = parsedBody.data; } else { requestErrors.push({ type: 'Body', errors: parsedBody.error }); } } if (schemas.query) { const parsedQuery = schemas.query.safeParse(req.query); if (parsedQuery.success) { requestData.query = parsedQuery.data; } else { requestErrors.push({ type: 'Query', errors: parsedQuery.error }); } } if (requestErrors.length > 0) { return next(new AppError('Bad request', 400, requestErrors)); } try { const result = await cb(requestData, req, res); if (schemas.response) { const parsedResponse = schemas.response.safeParse(result); if (!parsedResponse.success) { return next(new AppError('Bad response', 500, parsedResponse.error)); } } res.status(successStatusCode).json(result); } catch (error) { next(new AppError('Unknown error! Please try again later!', 500, error)); } };