WayrApp Backend & Ecosystem Documentation - v1.0.0
    Preparing search index...

    Function paginationMiddleware

    • Express middleware that validates and normalizes pagination query parameters.

      This middleware supports both traditional page-based pagination (page/limit) and modern offset-based pagination (offset/limit) strategies. It validates all query parameters using Zod schemas, enforces limits and allowed fields, and attaches the normalized pagination options to the request object for use by route handlers.

      The middleware automatically handles parameter coercion, validation errors, and provides fallback values for missing parameters. It also supports flexible filtering, sorting, and full-text search capabilities based on configuration.

      Parameters

      • Optionaloptions: PaginationOptions = {}

        Configuration options for pagination behavior

        Configuration options for the pagination middleware.

        PaginationOptions

        • OptionaldefaultLimit?: number

          Default number of items per page when not specified in query parameters

        • OptionalmaxLimit?: number

          Maximum allowed limit to prevent excessive data retrieval

        • OptionalallowedSortFields?: string[]

          Array of field names that are allowed for sorting operations

        • OptionalallowedFilters?: string[]

          Array of filter parameter names that are allowed in query parameters

        • OptionaldefaultSortField?: string

          Default field to sort by when sortBy is not specified or invalid

        • OptionalsearchFields?: string[]

          Array of field names to search within when search parameter is provided

      Returns (req: Request, _res: Response, next: NextFunction) => void

      Express middleware function

      When validation fails with VALIDATION_ERROR code

      // Basic usage with default options
      app.get('/api/items', paginationMiddleware(), itemController.getItems);
      // Advanced configuration for course listings
      app.get('/api/courses',
      paginationMiddleware({
      defaultLimit: 10,
      maxLimit: 50,
      allowedSortFields: ['name', 'created_at', 'updated_at'],
      allowedFilters: ['source_language', 'target_language', 'is_public'],
      defaultSortField: 'created_at',
      searchFields: ['name', 'description']
      }),
      courseController.getCourses
      );