Nest.js+TypeORM使用nestjs-typeorm-paginate实现按item_id过滤分页
修改方案
直接按以下步骤调整代码即可实现按item_id过滤后分页:
1. 调整控制器代码
把路由拿到的item_id传递给service方法,同时修正分页路由的动态参数:
import { QuestionsService } from 'src/questions/services/questions.service'; import { Questions } from '../models/questions.interface'; import { DeleteResult } from 'typeorm'; import { Response } from 'express'; import { IPaginationMeta, Pagination } from 'nestjs-typeorm-paginate'; import { QuestionsEntity } from '../models/questions.entity'; @Controller('questions') export class QuestionsController { constructor(private questionsService: QuestionsService) { } @Get(':item_id') async findAll( @Param('item_id') item_id: number, @Res() res: Response, @Query('page', new DefaultValuePipe(1), ParseIntPipe) page = 1, @Query('limit', new DefaultValuePipe(10), ParseIntPipe) limit = 10, ): Promise<Pagination<QuestionsEntity, IPaginationMeta> | void> { limit = limit > 100 ? 100 : limit; // 传递item_id到service,同时替换路由中的动态参数 const paginatedQuestions = await this.questionsService.paginate( { page, limit, route: `questions/${item_id}` }, item_id ); if (paginatedQuestions) return res.status(200).send(paginatedQuestions).end() return res.status(404).end('Error! Questions Not Found') } }
2. 调整Service代码
新增接收过滤参数的入参,在分页查询时添加where条件即可,nestjs-typeorm-paginate的paginate方法原生支持第三个参数传入TypeORM的查询配置:
import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { DeleteResult, Repository, FindManyOptions } from 'typeorm'; import { QuestionsEntity } from '../models/questions.entity'; import { Questions } from '../models/questions.interface'; import { paginate, Pagination, IPaginationOptions } from 'nestjs-typeorm-paginate'; @Injectable() export class QuestionsService { constructor( @InjectRepository(QuestionsEntity) private readonly questionsRepository: Repository<QuestionsEntity> ) { } // 新增itemId入参,接收过滤条件 async paginate(options: IPaginationOptions, itemId: number): Promise<Pagination<QuestionsEntity>> { // 传入where条件过滤item_id return paginate<QuestionsEntity>(this.questionsRepository, options, { where: { item_id: itemId } }); } }
如果后续需要更多过滤条件,也可以把service的第二个入参改成对象类型,把所有过滤字段都放进去,扩展起来更灵活。
内容的提问来源于stack exchange,提问作者Pablo Canale
相关产品推荐
相关产品推荐

