crud-api-express
Version:
    ![ma
91 lines (90 loc) • 3.47 kB
TypeScript
/// <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;