标签: nestjs

如何使用 nestjs 处理猫鼬错误

我按照https://docs.nestjs.com/techniques/mongodb 中的示例进行操作

问题是出现猫鼬验证错误时(例如,我有一个带有必填字段的架构,但未提供):

来自 games.service.ts:

  async create(createGameDto: CreateGameDto): Promise<IGame> {
    const createdGame = new this.gameModel(createGameDto);
    return await createdGame.save();
  }
Run Code Online (Sandbox Code Playgroud)

save() 函数返回一个 Promise。

现在我在 game.controller.ts 中有这个

  @Post()
  async create(@Body() createGameDto: CreateGameDto) {
    this.gamesService.create(createGameDto);
  }
Run Code Online (Sandbox Code Playgroud)

处理错误然后返回具有不同 http 状态和 json 文本的响应的最佳方法是什么?你通常会抛出一个HttpException但从哪里?如果我在承诺中使用 .catch() 处理错误,我就不能这样做。

(刚开始使用nestjs框架)

typescript nestjs

11
推荐指数
3
解决办法
1万
查看次数

如何在更新 mongodb 中的现有行时防止来自 nestjs 中客户端的不需要的对象属性

创建新用户将忽略来自 create-user.dto.ts

但是,当我更新用户时,它会添加不需要的字段,如下所示:

// update-user.dto.ts
import { IsEmail } from 'class-validator';
import { Address } from '../model/address';

export class UpdateUserDto {
  firstName: string;

  lastName: string;

  @IsEmail(undefined, { message: 'Not a valid e-mail' })
  email: string;

  username: string;

  password: string;

  addresses: Address[];
}
Run Code Online (Sandbox Code Playgroud)

这是来自用户服务的更新操作

// user.service.ts
  async update(data: UpdateUserDto) {
    try {
      this.logger.log(data);
      const id = '5c6dd9852d4f441638c2df86';
      const user = await this.userRepository.update(id, data);

      return { message: 'Updated your information' };
    } catch (error) {
      this.logger.log(error);
      throw new HttpException('', HttpStatus.INTERNAL_SERVER_ERROR);
    }
  } …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js typeorm class-validator nestjs

11
推荐指数
3
解决办法
3245
查看次数

使用 nestjs 中的类验证器验证可选参数?

我想对请求有效负载应用验证,例如有字符串类型的字段名称。但名称不是必填字段,但如果存在,则必须执行@IsNotEmpty()

我试过这样的事情 @IsNotEmpty() name?: string//它不考虑?可选约束

javascript validation node.js class-validator nestjs

11
推荐指数
3
解决办法
2万
查看次数

用玩笑测试打字稿中的私有函数

在下面的代码中,我的测试用例按预期通过,但我使用 stryker 进行突变测试,handleError 函数在突变测试中幸存下来,所以我想通过测试是否调用 handleError 函数来杀死突变体。需要帮忙测试私有函数。

我试过 spyOn 但没有用

const orderBuilderSpy = jest.spyOn(orderBuilder, 'build')
const handleError = jest.fn()
expect(rderBuilderSpy).toHaveBeenCalledWith(handleError)
Run Code Online (Sandbox Code Playgroud)

const orderBuilderSpy = jest.spyOn(orderBuilder, 'build')
const handleError = jest.fn()
expect(rderBuilderSpy).toHaveBeenCalledWith(handleError)
Run Code Online (Sandbox Code Playgroud)

typescript jestjs nestjs

11
推荐指数
1
解决办法
2万
查看次数

在 GraphQL Schema 中定义 Map 对象的最佳方法?

我尝试用对象数组映射一个键字符串。

我可以创建一个简单的对象,但我想在这些数组中轻松添加一个对象。地图对象非常适合执行此操作。

问题:我不知道如何为 GraphQL 定义类型映射 :'(

@ObjectType()
export class Inventaire
  @Field()
  _id: string;

 @Field()
  stocks: Map<string, Article[]>;
}
Run Code Online (Sandbox Code Playgroud)

node.js typescript graphql nestjs

11
推荐指数
1
解决办法
2万
查看次数

使用 NestJS/Elastic 对服务进行单元测试的正确方法是什么

我正在尝试对使用弹性搜索的服务进行单元测试。我想确保我使用了正确的技术。

我是这个问题许多领域的新用户,所以我的大部分尝试都是通过阅读与此类似的其他问题并尝试在我的用例中有意义的问题。我相信我缺少 createTestingModule 中的一个字段。也有时我看到providers: [Service]和其他人components: [Service]

   const module: TestingModule = await Test.createTestingModule({
      providers: [PoolJobService],
    }).compile()
Run Code Online (Sandbox Code Playgroud)

这是我当前的错误:

    Nest can't resolve dependencies of the PoolJobService (?). 
    Please make sure that the argument at index [0] 
    is available in the _RootTestModule context.
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

池作业服务

    Nest can't resolve dependencies of the PoolJobService (?). 
    Please make sure that the argument at index [0] 
    is available in the _RootTestModule context.
Run Code Online (Sandbox Code Playgroud)

PoolJobService.spec.ts

import { Injectable } from '@nestjs/common'
import { ElasticSearchService } from …
Run Code Online (Sandbox Code Playgroud)

elasticsearch graphql nestjs typegraphql

11
推荐指数
1
解决办法
7529
查看次数

在 TypeScript 和 NestS 中将类转换为类/对象(实体到 DTO)

如何转换数据库实体User

class User {
  public firstName: string;
  public lastName: string;
  public phone?: string;
  public email: string;
  public status: EUserState;
  public tokens: Token[];
  public password: string;
}

Run Code Online (Sandbox Code Playgroud)

进入 DTO 实体GetUserDTO

class GetUserDTO {
  public id: number;
  public firstName: string;
  public lastName: string;
  public phone?: string;
  public email: string;
}
Run Code Online (Sandbox Code Playgroud)

在打字稿中?我正在使用@nestjs,class-validatorclass-transformer包,但我没有找到任何方法来使用它们来实现这一目标。

有人可能会说,拥有 DTO 对此毫无意义,但我们在服务器和客户端之间共享 DTO 以维护 API 结构。

有任何想法吗?

typescript class-validator nestjs class-transformer

11
推荐指数
1
解决办法
6623
查看次数

如何在不运行应用程序的情况下使用nestjs生成openapi规范

我们有很多用nodejs编写的API,使用nestjs框架。我们可以使用 Nestjs 中的 SwaggerModule 生成 openapi.yaml。效果很好。但问题是它需要 API 启动,因此数据库启动并运行。这对我们的 CI/CD 来说是一个问题,因为我们需要在运行 API 之前生成 openapi 规范。

是否可以从我们的代码生成 openapi 规范,而不需要运行应用程序?或者也许有一种简单的方法来模拟我们的数据库?

感谢您的帮助

node.js swagger openapi nestjs

11
推荐指数
1
解决办法
9544
查看次数

TypeORM 和 PostgreSQL 中的当前日期

在 PostgreSQL 和 TypeORM 中拥有日期字段的最佳方式是什么?

我在 PostgreSQL(一般 SQL 数据库)中相对较新,但在 MongoDB(使用 Mongoose)中我通常有一个这样的字段:

export class User {
  @Prop({ default: Date.now() })
  createdAt: Date;
}
Run Code Online (Sandbox Code Playgroud)

在 TypeORM 和 PostgreSQL 中与此等效的是什么?因为,如果我使用这种方法,PostgreSQL 会抛出错误。

QueryFailedError:日期/时间字段值超出范围:“1634416004545”

javascript postgresql typescript nestjs

11
推荐指数
2
解决办法
2万
查看次数

TypeORM 是否为不同存储库提供事务?

目前,三个不同的存储库需要将某些内容作为单个事务进行处理。

我的服务代码写如下。但与我想象的不同,每个存储库都生成自己的事务。我怎么解决这个问题?

// TrimService

@Injectable()
export class TrimService {
    constructor(
        private readonly trimRepository: TrimRepository,
        private readonly tireRepository: TireRepository,
        private readonly userRepository: UserRepository
    ) {}

    async saveUserTrim(saveUserTrimDto: SaveUserTrimDto, res) {
        const queryRunner = await getConnection().createQueryRunner();
        await queryRunner.startTransaction();

        try {
            const findUser: User = await this.userRepository.findUser(
                saveUserTrimDto.id,
                queryRunner.manager
            );

            const createTrim: Trim = await this.trimRepository.saveUserTrim(
                findUser,
                saveUserTrimDto.trimId,
                queryRunner.manager
            );

            await this.tireRepository.saveTrimTire(
                createTrim,
                res,
                queryRunner.manager
            );

            await queryRunner.commitTransaction();
            return createTrim;
        } catch (err) {
            console.log(err);
            await queryRunner.rollbackTransaction();
        } finally {
            await queryRunner.release();
        } …
Run Code Online (Sandbox Code Playgroud)

typeorm nestjs

11
推荐指数
1
解决办法
2万
查看次数