redhare-demo/helpers/api/api-handler.js

32 lines
1000 B
JavaScript

import { NextResponse } from 'next/server'
import { errorHandler, jwtMiddleware, validateMiddleware, identityMiddleware } from '.'
export { apiHandler }
function isPublicPath(req) {
// public routes that don't require authentication
const publicPaths = ['POST:/api/auth/login', 'POST:/api/auth/logout', 'POST:/api/auth/register']
return publicPaths.includes(`${req.method}:${req.nextUrl.pathname}`)
}
function apiHandler(handler, { identity, schema, isJwt } = {}) {
return async (req, ...args) => {
try {
if (!isPublicPath(req)) {
// global middleware
await jwtMiddleware(req, isJwt)
await identityMiddleware(req, identity, isJwt)
await validateMiddleware(req, schema)
}
// route handler
const responseBody = await handler(req, ...args)
return NextResponse.json(responseBody || {})
} catch (err) {
console.log('global error handler', err)
// global error handler
return errorHandler(err)
}
}
}