UNPKG

crud-api-express

Version:

![npm](https://img.shields.io/npm/v/crud-api-express) ![downloads](https://img.shields.io/npm/dm/crud-api-express) ![license](https://img.shields.io/npm/l/crud-api-express) ![made-with-node](https://img.shields.io/badge/Made%20with-Node.js-green) ![ma

91 lines (90 loc) 3.47 kB
/// <reference types="mongoose/types/aggregate" /> /// <reference types="mongoose/types/callback" /> /// <reference types="mongoose/types/collection" /> /// <reference types="mongoose/types/connection" /> /// <reference types="mongoose/types/cursor" /> /// <reference types="mongoose/types/document" /> /// <reference types="mongoose/types/error" /> /// <reference types="mongoose/types/expressions" /> /// <reference types="mongoose/types/helpers" /> /// <reference types="mongoose/types/middlewares" /> /// <reference types="mongoose/types/indexes" /> /// <reference types="mongoose/types/models" /> /// <reference types="mongoose/types/mongooseoptions" /> /// <reference types="mongoose/types/pipelinestage" /> /// <reference types="mongoose/types/populate" /> /// <reference types="mongoose/types/query" /> /// <reference types="mongoose/types/schemaoptions" /> /// <reference types="mongoose/types/schematypes" /> /// <reference types="mongoose/types/session" /> /// <reference types="mongoose/types/types" /> /// <reference types="mongoose/types/utility" /> /// <reference types="mongoose/types/validation" /> /// <reference types="mongoose/types/virtuals" /> /// <reference types="mongoose/types/inferschematype" /> /// <reference types="mongoose/types/inferrawdoctype" /> import { Request, Response, Router, NextFunction } from 'express'; import { Document, Model } from 'mongoose'; /** * Options for configuring the CRUD controller behavior. */ export interface CrudOptions<T extends Document> { middleware?: ((req: Request, res: Response, next: NextFunction) => void)[]; onSuccess?: (res: Response, method: string, result: T | T[] | any) => void; onError?: (res: Response, method: string, error: Error) => void; methods?: ('POST' | 'GET' | 'PUT' | 'DELETE')[]; relatedModel?: Model<any>; relatedField?: string; relatedMethods?: ('POST' | 'GET' | 'PUT' | 'DELETE')[]; aggregatePipeline?: object[]; customRoutes?: { method: 'post' | 'get' | 'put' | 'delete'; path: string; handler: (req: Request, res: Response) => void; }[]; } /** * A generic CRUD Controller for Express/Mongoose API development. * * It registers standard CRUD endpoints based on the provided model and endpoint string, * along with any custom routes. */ declare class CrudController<T extends Document> { private model; private endpoint; private router; private routes; constructor(model: Model<T>, endpoint: string, options?: CrudOptions<T>); /** * Applies middleware to the route handler. * @param routeHandler The original route handler. * @param middlewareList Optional array of middleware functions. * @returns Array of middleware functions including the route handler. */ private applyMiddleware; /** * Registers route definitions to the internal list. * @param method HTTP method. * @param path URL path. * @param params Optional route parameter names. */ private registerRoute; /** * Configures all endpoints based on given options. * @param options CrudOptions to setup CRUD behaviors. */ private configureRoutes; /** * Returns the configured Express router. */ getRouter(): Router; /** * Returns an array of registered route definitions. */ getRoutes(): { method: string; path: string; params?: string[]; }[]; } export default CrudController;