如何使用返回多个项目的 TypeORM 设置 Nestjs 查询?
Posted
技术标签:
【中文标题】如何使用返回多个项目的 TypeORM 设置 Nestjs 查询?【英文标题】:How To Setup A Nestjs Query With TypeORM That Returns Multiple Items? 【发布时间】:2018-11-11 23:38:04 【问题描述】:我从 Angular 发送这个 URL:
http://localhost:3000/api/skills?category_id=2
问题是,如何修复我的代码,以便它检索 category_id 为 2 的所有技能?
我不是在寻找技能 ID,我可以毫无问题地获取个人技能。记录如下:
skill_id
skill_name
category_id
在skills.controller 我有这个。我一直在尝试使用 @Get 参数,但仍然无法调用此函数。 Console.log 永远不会被调用。另外,我不知道如何告诉服务我想要所有 category_id 为 2 或所需数字的技能记录。
@Get('?category_id')
public async getSkillsByCategory(@Param('category_id') categoryId)
console.log('skills recordId in controller: ', categoryId.id);
return this.skillsService.getSkillsByCategory(categoryId.id);
在技能服务中,我有这个,但它没有告诉数据库 Postgres 查询 category_id 2。不知何故,这需要发生,但 category_id 列似乎不是常规参数。
async getSkillsByCategory(categoryId)
console.log('categoryId in service', categoryId);
return await this.skillsRepository.find(categoryId);
【问题讨论】:
【参考方案1】:假设您的技能根路径是http://localhost:3000/api/skills/
,请将您的控制器更改为:
import ParseIntPipe from '@nestjs/common';
// you can use ParseIntPipe to validate if id is actually number, very useful
@Get('category/:id') // or @Get('/category/:id')
public async getSkillsByCategory(@Param('id', new ParseIntPipe()) id)
return this.skillsService.getSkillsByCategory(id);
还有你的服务:
async getSkillsByCategory(id)
return await this.skillsRepository.find( category_id: id );
现在拨打http://localhost:3000/api/skills/category/2
。
【讨论】:
谢谢,但是那个 URL 没有调用 Get 参数。我在 Postman 中测试了您的 URL,比更改我的 Angular 代码更快,并且 Get 中的 console.log 从未被调用。它看起来比我尝试过的任何东西都要好 :-) 顺便说一下,这个 URL 将检索 Skill_id 2 所以我的主要设置有效:localhost:3000/api/skills/2 skill_id 的选择查询的结尾如下所示:WHERE ("Skills"."skill_id" = $1) -- PARAMETERS: ["2"]。我需要类似的东西来查找具有特定 category_id 的所有技能。 我更改了您的 Get 参数并调用:'/category_id/2' 然后我在选择查询结束时得到这个:WHERE "Skills"."category_id" = $1 -- PARAMETERS: [null ] 这似乎越来越接近。至少它现在正在调用 Get 函数。 等一下。我将设置项目并进行测试 这行得通! Get('/category_id/:id') 感谢您让我走上正轨!编辑您的帖子,我会将其标记为答案。 :-)以上是关于如何使用返回多个项目的 TypeORM 设置 Nestjs 查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 typeorm 中使用“leftJoin”从多个表中获取结果?
如何从控制器 JSON 返回的实体字段中排除。 NestJS + Typeorm