Sou de front e precisava fazer uma API em node e o seu conteúdo tá me ajudando pra caramba! Valeu. Uma coisa que pode ser legal pra deixar os erros ainda mais flexíveis: quando vc cria as classes dos erros vc passa o status code pra não precisar preencher, mas dá pra fazer com a mensagem tbm: export class UnauthorizedError extends ApiError { constructor(message: string) { const msg = message ?? "Unauthorized"; super(msg, 401); } } Daí na hora de lançar o erro vc pode simplesmente fazer assim: throw new UnauthorizedError(); Mas se preferir pode lançar a mensagem personalizada: throw new UnauthorizedError('You're not authorized to stay here! Get out!');
@gabrielrodriguesricardo2 жыл бұрын
Top demais utilizar esse recurso de herança de classes (POO). O código fica muito mais simples e fácil de manutenção. No .NET isso já vem default. Parabéns, Guido! Ganhou um seguidor :)
@moacirdavid3562 Жыл бұрын
Muito boa sua didática, Guido! Bem objetivo e claro! Parabéns!!
@nellfs2 жыл бұрын
Cara, valeu demais, eu tava perdido aqui com um erro no throw em async e pensava que era meu código, passei o dia pesquisando oque tava rolando, no final da noite cai aqui, logo no minuto que você fala sobre o problema do express com async/await do ES6 e sua recomendação da lib express-async-erros, você é meu herói!
@guidocerqueira2 жыл бұрын
Hahaha que massa. Fico feliz em saber que te ajudou de alguma forma. Sucesso!
@robertocaliz4143 Жыл бұрын
Muito obrigado pelo conteúdo! Certamente vou aplicar em meus projetos.
@toskito123 Жыл бұрын
Cara, que daora, era isso mesmo que eu tava procurando aprender, muito obrigado
@lucca4345 Жыл бұрын
vídeo impecável!! muito didático e esclarecedor, obrigado pelo conteúdo :D
@brunofelixf Жыл бұрын
Que ótima solução e excelente didática... obrigado por compartilhar! 👏👏👏
@edsonbreno5763 Жыл бұрын
Obrigado pela aula, @Guido! 😃
@gatogordo41312 жыл бұрын
Estava acompanhando uma vídeo aula aonde esse tema foi abordado de maneira superficial. Seu conteúdo me ajudou a aprofundar e a melhorar meu código :D
@JoaoVitor-pc4ps2 жыл бұрын
Cara, tava precisando dessa dica, já tava cansado do try catch hahaha, valeuuu! 🤘
@viniciuspereira52782 жыл бұрын
Teus vídeos são incriveis cara! Parabens!!
@guidocerqueira2 жыл бұрын
Muito obrigado pelo feedback, Vinicius!
@jpcc12232 жыл бұрын
Muito bom o conteúdo! Com certeza vou implementar em meus projetos! Obrigado pelas dicas
@matheussudre43542 жыл бұрын
Parabéns pelo conteudo, cai aqui por acaso, mas amei demais essa forma de tratar os erros
@maiconpereiradesouza55332 жыл бұрын
Muito bom!!!! Obrigado pelo conteúdo!
@GilsonAlvessout2 жыл бұрын
Guido já estou utilizando no segundo desafio da cubos/ifood vlw ótimo conteúdo
@pietrosouza4443 Жыл бұрын
Muito bom, ajudou bastante, obrigado! 🙂
@LucasOliveira-bg3bj Жыл бұрын
Muito obrigado pelo conteúdo! Se pudesse dava dois likes!
@edsonmartinelli2 жыл бұрын
Bom vídeo, amigo. Para aqueles que tiveram algum problema por usarem funções assíncronas, recomendo que utilizem o argumento next da própria função de rota para passar o erro ao invés do throw. Esse problema será resolvido com a chegada do Express 5, mas ele ainda se encontra em beta.
@James-kq5wb2 жыл бұрын
cara, sensacional, excelente video
@guidocerqueira2 жыл бұрын
Muito obrigado pelo feedback, James!
@DieDona2 жыл бұрын
ótimo vídeo, muito obrigado!
@juaciu-_-64847 ай бұрын
Qual a diferença de criar uma unica instancia de um controller e fazer como você fez, uma instancia para cada rota? Tem alguma diferença?
@igorribeiro632 Жыл бұрын
Video top demais, porém continuei precisando utilizar o try catch para passar meu erro para o middleware, pq ele estava ainda sim travando minha aplicação
@laurentino547 Жыл бұрын
👏🏼👏🏼👏🏼👏🏼
@quicksketch16178 ай бұрын
Olá, muito ótima explicação. Uma dúvida, como você sabe que existe um tipo Request.Response e NextFunction, pra usar o typescript?
@gabrielkyomen4782 Жыл бұрын
Salve Guido, ótimo vídeo como sempre! Essa abordagem é realmente boa para tratar aqueles erros inesperados sem ter um trycatch em cada função, porém queria tirar algumas dúvidas: Primeiro na tipagem do erro do middleware, 'Error & Partial', por ApiError ter um 'extends Error', não daria para simplificar, deixando apenas 'Partial'? Outra coisa é que já ouvi falar que o uso de throw para lidar com problemas pode ser custoso para a performance da aplicação. Isso é verdade? Se for, não seria melhor usar a abordagem apenas para os erros inesperados? Talvez apenas criando um helper para retornar erros comuns, sem lançar eles? Valeu demais pelo vídeo! Bom ano novo
@brunodepaula52939 ай бұрын
Da pra fazer isso usando o pattern de decorator seja com express ou nao.
@ldstudio304410 ай бұрын
tom muinto obrigado
@dhiegopereira2 жыл бұрын
Very good
@felipematheus65182 жыл бұрын
top demais!
@wagnerfillio1031 Жыл бұрын
E se lançar um erro do zod ou prisma que são específicos?
@lucasmedeiros9755 Жыл бұрын
Cara, uma pergunta: Nesse file de routes, pq cada rota tem uma nova instancia do controller? Não seria melhor receber no constructor como no dot net ou spring sem autowired?
@paulosoares86262 жыл бұрын
Show
@er1v4n-hu32 жыл бұрын
Uma dica: Se o controller usar funções assíncronas, ainda vai precisar de um try-catch pra pegar o erro (o express não pega erros assíncronos), mas pode ser feito só chanando a "next(err)" dentro do catch e vai pro middleware.
@aspli2 жыл бұрын
Mas o import 'express-async-errors' não resolveu o problemas das funções assincronas? Ainda assim vou precisar do try-cath?
@larissacavalcante7253 Жыл бұрын
@@aspli estou com o mesmo problema, ele n funciona sem o try and catch, mesmo com o import
@neederp7 ай бұрын
valeu cara, tava quebrando a cabeça aqui
@williamfreitas2 жыл бұрын
no meu aparece isso UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "#".
@jhonnyfreire Жыл бұрын
Será que alguém aqui conhece uma alternativa ao express-async-errors? A última versão publicada tem 5 anos.
@HypeMansion Жыл бұрын
mas funcona perfeitamente, nao mudou nada pq é simples
@luigginosa8092 жыл бұрын
perfeito
@Ronielcs2 жыл бұрын
Olá @guidocerqueira , primeiramente sensacional o seu vídeo, gostaria de uma ajuda sua, fiz o teste aqui utilizando as novas versões do Node e do Express e a biblioteca express-async-errors parece não funcionar mais para as async functions, conseguiria fazer um exemplo com as novas versões? Ajudaria muito aqui rsrsrs abraços.
@HypeMansion Жыл бұрын
estou no express 4.18.2 e funcionando, eu tive que revisar umas promises que eu tinha escrito errado sem tratamento no reject
@ogustavovasquez2 жыл бұрын
Vídeo muito bom. Obrigado! Mas fiquei me perguntando por que não retornar para o client o statusCode e o nome do erro no objeto também? Seria errado?
@guidocerqueira2 жыл бұрын
O status code já é retornado no status da resposta. Vc pode retornar um objeto com todas essas informações também, mas não faz muito sentido, pelo menos em produção. Uma opção é você retornar um objeto com as informações do erro apenas em ambiente de desenvolvimento.
@LeandroCorso Жыл бұрын
Resolvi implementar o YUP pra fazer as validações da minha API. Por padrão o método validate() usa uma promise pra retornar os erros encontrados. Nesse caso ele usa o then/catch e não tem muito como fugir disso, correto? Uma vez que usando o método isValid() retorna booleando sem o objeto com os erros de validação. O que fiz foi colocar no catch do validate() o throw new BadRequestError(err.message). Existe uma outra forma mais interessante de fazer essa validação ou vc recomenda manter do jeito que está? export class AreasController { index = async (req: Request, res: Response) => { getAllRecordsSchema .validate(req.query) .then(async () => { const data = await getAllRecords(req.query, entity); res.json(data); }) .catch((err) => { throw new BadRequestError(err.message) }); };
@guidocerqueira Жыл бұрын
Se você tiver implementado o tratamento de erros, ao lançar uma exceção pelo validate já será captado pelo middleware de tratamento de erros
@leonardohirosue93762 жыл бұрын
Ótima aula e ótima didática! Cheguei até o video pois estou enfrentando um problema em minha aplicação, e infelizmente o meu "express-async-errors" não funcionou de jeito nenhum 😢 Algum palpite do que pode ser? E antes que eu me esqueá, parabéns pela organização, vou aderir a tratativa dos erros em meus códigos 👍
@guidocerqueira2 жыл бұрын
Obrigado pelo feedback, Leonardo. Sobre o problema, gera algum erro?
@leonardohirosue93762 жыл бұрын
@@guidocerqueira A aplicação continua quebrando ao invés de retornar a mensagem e o statusCode. Acredito que seja algo no meu Setup...
@guidocerqueira2 жыл бұрын
Se quiser, depois me manda uma mensagem no Instagram q tento te ajudar
@vonbruhh2 жыл бұрын
Tava com esse problema e consegui resolver. No meu caso, eu to chamando um service dentro de um controller, mas só o service tava como async/await, porque é quem acessa o banco de dados. Deixei o controller como async/await e resolveu o problema.
@gilvanbatista8402 Жыл бұрын
Eita Guido cerqueira from cubos!! KKKKKKKKKKK pfv me diz que esse canal tem um curso de typescript completo não vou conseguir aprender backend com outra pessoa
@viniciusduartepasso663911 ай бұрын
Isso funciona no nest.js?
@darksideeditions42517 ай бұрын
Deve existir modo de fazer algo para ele, mas esse caso em especifico é em express.
@pedrofaria73222 жыл бұрын
Quando eu tenho um erro assíncrono, como por exemplo o jwt.verify() que retorna um erro caso a assinatura do jwt não seja válida, eu só consigo retornar o erro com status 500 e "internal server error", em vez de conseguir personalizar esse erro. Tem como fazer isso sem usar o bloco try catch?
@guidocerqueira2 жыл бұрын
Você pode verificar o erro no middleware de erro e pegar o tipo de erro do jwt, assim vc consegue personalizar. Pra isso, vc precisa ver qual erro estoura quando se trata do jwt.verify()
@pedrofaria73222 жыл бұрын
@@guidocerqueira Apesar disso, gostei muito desse padrão de tratamento de erros, achei bastante organizado. Ví seu tutorial de criação de uma API rest e aprendi demais, por favor continue com os seus vídeos, você ensina muito bem
@TheJhonny99432 жыл бұрын
Olá amigo assisti o seu video a um tempo atras e me foi muito útil ... mas do nada parou de funcionar. os dados não caem mais no middleware de erro. Eu estou em uma pilha de nervos com isso já , olhe seu video e refiz tudo do zero , e o mesmo erro persiste. Além disso ele ainda trava meu backend , fazendo com que eu tenha que reiniciar o servidor manualmente. já pegou algo parecido , se sim pode me dar uma luz ?
@guidocerqueira2 жыл бұрын
Fala Jhonnatan. Teria como vc compartilhar o erro que você está recebendo? Fique tranquilo que vou te ajudar
@euassistovc33252 жыл бұрын
Por algum motivo o nome do meu erro não altera, o nome fica padrão (Error) e ao lado dele o nome customizado, exemplo: Error [ApiError], e então eu mudei manualmente com this.name e dei um nome diferente do nome da classe, exemplo ApiErrorDois, e o nome alterou normalmente após isso. Por disso? Não pode usar o mesmo nome da classe?
@guidocerqueira2 жыл бұрын
Tenta passar o seguinte: this.name = this.constructor.name assim ele vai pegar o nome da classe
@euassistovc33252 жыл бұрын
@@guidocerqueira também nao foi, muito estranho porque isso só acontece se o nome do erro for exatamente igual ao nome da classe, se passar, nesse exemplo, um ApiErrorr (com um r a mais) , ele funciona normal, também já testei e é igual com as outras classes de erro
@guidocerqueira2 жыл бұрын
Realmente é estranho. Me manda um print do seu código em alguma das minhas redes sociais que tento te ajudar. Vamos resolver isso