Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema para lançar mensagens de erro personalizadas.

Estava colocando a constrain unique no campo de e-mail, para testar.

Fiz isso com uma nova migration com esse código:

"use strict"
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.addConstraint("Pessoas", {
      fields: ["email"],
      type: "unique",
      options: {
        customIndex: true,
        indexName: "unique_email_index",
        errorMsg: "Email já cadastrado.",
      }
    })
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.removeConstraint('Pessoas')
  },
}

Porém não consegui fazer a mensagem aparecer no console do Postman :'( .

Vi que o erro de validação é lançado como uma exceção e que seria necessário criar uma lógica para tratar isso. Mas fiquei tentando encontrar algo mais limpo e alinhado com a estrutura do código da aula, ou uma maneira simples de fazer isso, porém não encontrei.

Se alguém puder me dar uma luz eu agradeço demais!

2 respostas
solução!

Olá Emmanuelle, tudo bem? Espero que sim!

Se você deseja exibir a mensagem de erro "Email já cadastrado" no console do Postman quando ocorrer uma exceção de validação ao adicionar a restrição unique no campo de e-mail, você pode usar um middleware personalizado no Express para lidar com as exceções.

Aqui está um exemplo de como você pode fazer isso:

// middleware de tratamento de exceções
function errorHandler(err, req, res, next) {
  if (err.name === 'SequelizeUniqueConstraintError') {
    res.status(400).json({ error: err.errors[0].message });
  } else {
    // trata outros erros
    console.error(err);
    res.status(500).json({ error: 'Ocorreu um erro no servidor.' });
  }
}

// configurar o middleware de tratamento de exceções
app.use(errorHandler);

Certifique-se de adicionar esse middleware após as rotas no seu aplicativo Express. Ele será responsável por capturar exceções e fornecer uma resposta adequada com a mensagem de erro no formato JSON.

Quando ocorrer um erro de restrição unique no Sequelize, ele lançará uma exceção do tipo SequelizeUniqueConstraintError. O middleware verifica se é esse o tipo de erro e, em seguida, extrai a mensagem de erro do primeiro erro e a envia como resposta ao cliente.

Você também pode personalizar a resposta de erro ou o status de acordo com as suas necessidades. O exemplo acima usa um status 400 (Bad Request) para erros de validação e um status 500 (Internal Server Error) para outros erros.

Certifique-se de reiniciar o servidor após adicionar o middleware para que ele entre em vigor. Agora, quando uma exceção de restrição unique ocorrer, a mensagem de erro "Email já cadastrado" será exibida no console do Postman.

Espero ter ajudado!

Caso tenha dúvidas, fico à disposição.

Abraços e bons estudos!

Muito obrigada pela solução!