Skip to main content
The @nestjsx/crud-request package provides utilities for building and parsing complex queries. It supports filtering, sorting, pagination, field selection, and relation joins through URL query parameters.

Query parameters

Clients can control API responses using standardized query parameters:

Field selection

Select specific fields to include in the response:
Both fields and select parameters work identically.

Filtering

Filter results using comparison operators:

Comparison operators

The framework supports these filter operators:
Case-insensitive variants are available by appending L to the operator: $eqL, $contL, $startsL, etc.
From /home/daytona/workspace/source/packages/crud-typeorm/src/typeorm-crud.service.ts:854-971:

OR conditions

Use the or parameter for OR logic:
For complex queries, use the s (search) parameter with JSON:
Search supports nested $and and $or conditions:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:103-108:

Sorting

Sort results by one or more fields:

Pagination

Paginate results using limit/offset or page-based pagination:
When pagination is enabled, responses include metadata:

Joining relations

Load related entities:
Relations must be configured in the controller’s query.join options before they can be requested.

Cache control

Control query caching:

Soft deletes

Include soft-deleted records:

Request query builder

The RequestQueryBuilder class helps build query strings programmatically in frontend applications:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:24-243:

Builder methods

select()

Select specific fields:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:95-100: Add complex search conditions:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:103-108:

setFilter() and setOr()

Add filter conditions:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:110-118: Filters can also be passed as arrays:

setJoin()

Join relations:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:120-131:

sortBy()

Sort results:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:133-144:

setLimit(), setOffset(), setPage()

Pagination controls:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:146-169:

resetCache()

Bypass cache:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:161-164:

setIncludeDeleted()

Include soft-deleted records:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:166-169:

Create from params

Build a query from a params object:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:196-211:

Custom query options

Customize parameter names globally:
From /home/daytona/workspace/source/packages/crud-request/src/request-query.builder.ts:25-41:

ParsedRequest decorator

In controllers, access parsed request data using the @ParsedRequest() decorator:
The CrudRequest interface contains:

Validation

Query parameters are automatically validated. Invalid requests return 400 Bad Request:
Validation is based on the controller’s query configuration. Fields, filters, and joins must be explicitly allowed.

Examples

Frontend integration

React example using the query builder:

Complex filtering

Combine multiple filter types:

Next steps

Controllers

Learn how to configure query options in controllers

Services

Understand how services process requests