2024-05-23 09:42:14 +00:00
|
|
|
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/>
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2021-05-03 18:06:36 +00:00
|
|
|
import { eachSeries } from 'async'
|
|
|
|
import type { NextFunction, Request, RequestHandler, Response } from 'express'
|
|
|
|
|
|
|
|
// Syntactic sugar to avoid try/catch in express controllers
|
|
|
|
// Thanks: https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8-b8af872c0016
|
|
|
|
|
|
|
|
export type RequestPromiseHandler = ((req: Request, res: Response, next: NextFunction) => Promise<any>)
|
|
|
|
|
|
|
|
function asyncMiddleware (fun: RequestPromiseHandler | RequestPromiseHandler[]): RequestHandler {
|
|
|
|
return (req: Request, res: Response, next: NextFunction) => {
|
|
|
|
if (Array.isArray(fun)) {
|
|
|
|
eachSeries(fun as RequestHandler[], (f, cb) => {
|
|
|
|
Promise.resolve(f(req, res, (err: any) => cb(err)))
|
|
|
|
.catch(err => next(err))
|
|
|
|
}, next)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
Promise.resolve((fun as RequestHandler)(req, res, next))
|
|
|
|
.catch(err => next(err))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export {
|
|
|
|
asyncMiddleware
|
|
|
|
}
|