2
respostas

O nestjs não captura exceções do tipo internal server error

A minha primary key está definida assim na entidade nestjs + typeorm:

@PrimaryColumn()
 id:string

e vai ser preenchida com um valor a ser obtido.

A minha tabela no banco (MSSQL) está assim:

CREATE TABLE medicao2 (
    id NVARCHAR(255) PRIMARY KEY NOT NULL,
    batch_id NVARCHAR(20) NOT NULL,
    ocv_date NVARCHAR(20) NOT NULL,
    ocv DECIMAL(10, 3) NOT NULL
);

porem ao inserir os dados com id duplicado o nestjs não captura o erro no banco.

Outro detalhe:

ao inserir manualmente um id duplicado no banco o erro acontece. ao mudar a primary key na entidade para:

@PrimaryGeneratedColumn()
     id:number

O nestjs captura o erro normalmente

O que pode ser?

2 respostas

E aí! Beleza? Olha só, isso pode tá rolando porque quando tu usa @PrimaryColumn() id:string, o TypeORM não tá gerenciando automaticamente a geração do ID, sabe? Aí, quando tu manda um ID duplicado na mão, o banco só se toca na hora do insert e reclama.

Quando tu muda pra @PrimaryGeneratedColumn() id:number, o TypeORM já assume o controle do ID e consegue detectar antes se tá repetido, e por isso ele pega o erro de boa.

Uma alternativa seria, se quiser manter a string como ID e ainda assim pegar o erro, tu pode dar uma olhada na opção {onConflict: 'DO NOTHING'} do TypeORM. Tipo assim:

@PrimaryColumn({ onConflict: 'DO NOTHING' })
id: string;

Aí, quando tentar inserir um ID repetido, o banco ignora e tu não pega erro.

Dá um toque se precisar de mais alguma coisa, beleza? Estamos aí pra ajudar!

Não consigo usar essa opção, parece não ser um valor aceito no metodo @PrimaryColumn ():

@PrimaryColumn({onConflict:'DO NOTHING'})
    id:string

Complementando Para o que estou fazendo é importante que esse campo seja primary key, detecte se há valores duplicados e retorne erro caso ocorra a tentativa de inserção duplicada, tem alguma forma de fazer isso no nestjs + typeorm?