如何使用返回多个项目的 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”从多个表中获取结果?

TypeORM 命令不返回任何内容

Typeorm 连接多个数据库

如何从控制器 JSON 返回的实体字段中排除。 NestJS + Typeorm

使用 typeorm 在 postgres 中搜索数组中的项目

如何从 typeorm postgreSQL 中获取软删除的实体?