Descubra os vários tipos de erro com os quais você pode lidar e como usar o Express.js para lidar com eles.

Principais conclusões

  • Erros em aplicativos Express.js podem ser categorizados em erros de sintaxe e tempo de execução, validação de entrada e erros do usuário, erros relacionados ao banco de dados e à rede e erros de serviço e API de terceiros.
  • Capturar e registrar erros no console é uma maneira simples de lidar com erros durante as fases de desenvolvimento e depuração no Express.js. Pacotes de tratamento de erros, como express-error-handler, fornecem funcionalidade pronta para uso para gerenciar e responder a erros.
  • A manipulação de erros síncronos e assíncronos usando blocos try-catch é uma técnica eficaz no Express.js. Para operações assíncronas, integrar as palavras-chave async e await nos blocos try-catch pode aprimorar o tratamento de erros. A criação de um middleware de tratamento de erros personalizado permite uma abordagem centralizada e personalizada para o gerenciamento de erros.

Em um cenário ideal, você cria suas APIs e serviços de back-end, implanta-os na produção e, em seguida, senta e relaxa enquanto outros os usam. Infelizmente, no mundo real, os programas que você escreve certamente conterão erros e bugs.

Por esse motivo, ao desenvolver APIs e serviços de back-end do Express.js, é importante levar em consideração como diferentes erros podem ocorrer e como lidar com eles de maneira eficaz.

Ao antecipar tais cenários, você pode garantir que seus aplicativos não apenas lidem com falhas de maneira eficaz, mas também forneçam aos usuários uma experiência perfeita.

Tipos comuns de erros em aplicativos Express.js

Ao desenvolver aplicativos Express.js, você encontrará vários tipos de erros, incluindo:

  1. Erros de sintaxe e tempo de execução: erros de sintaxe ocorrem quando há erros na sintaxe do código, o que significa que o aplicativo não pode ser executado. Erros de tempo de execução, por outro lado, ocorrem quando o programa está em execução, geralmente devido a condições inesperadas ou dados incorretos.
  2. Validação de entrada e erros do usuário: esses erros ocorrem quando os usuários fornecem dados insuficientes ou inválidos durante as interações com o aplicativo. Esses erros podem se manifestar de várias formas, como campos obrigatórios ausentes, formatos de dados incorretos ou valores que não atendem a critérios específicos.
  3. Erros relacionados ao banco de dados e à rede: erros relacionados ao banco de dados e à rede podem ocorrer quando há um problema de conexão com um banco de dados ou quando a comunicação com aplicativos externos pela rede falha. Esses erros podem ser particularmente problemáticos se seu aplicativo depende da rede para operar.
  4. API de terceiros e erros de serviço: Erros também podem surgir ao interagir com APIs ou serviços externos. Ao fazer solicitações a sistemas externos, vários problemas podem surgir. Por exemplo, a API pode passar por tempo de inatividade, retornar respostas com erros devido a parâmetros inválidos ou retornar formatos de dados inesperados.

Existem várias técnicas que você pode usar para lidar efetivamente com erros em seu Express.js API REST e serviços de back-end.

1. Capturando e registrando erros no console

Uma maneira direta de lidar com erros é detectá-los e registrar os detalhes no console. Essa abordagem ajuda a identificar erros durante as fases de desenvolvimento e depuração.

usando console.error(), você pode obter informações sobre a natureza e a localização dos erros em seu aplicativo. Aqui está um exemplo de código:

app.get('/example', (req, res) => {
try {
// Code that may cause an error
const result = someFunction();
res.json(result);
} catch (error) {
console.error('Error occurred:', error);
res.status(500).json({ message: 'An error occurred.' });
}
});

2. Usando pacotes de tratamento de erros

O Express.js oferece vários pacotes de middleware de tratamento de erros para simplificar o gerenciamento de erros. Um desses pacotes é manipulador de erros expresso—esses pacotes facilitam o tratamento e a resposta a erros, fornecendo funcionalidades prontas para uso, como mensagens de erro personalizadas e recursos de registro de erros.

Para usar este pacote, você precisa instalá-lo em seu projeto:

npm install express-error-handler

Depois de instalado, você pode usar seus recursos para aprimorar os recursos de tratamento de erros do seu aplicativo.

const errorHandler = require('express-error-handler');

// Register the error-handling middleware
app.use(errorHandler({
static: {
'404': 'path/to/404.html'
}
}));

Por exemplo, no exemplo acima, suponha que um usuário solicite uma rota que não existe. A função do manipulador acionará e redirecionará o usuário para uma página de erro 404 personalizada, 404.html. Isso garante que o aplicativo Express.js manipule efetivamente um erro de página não encontrada.

Essencialmente, esses pacotes fornecem uma abordagem mais amigável para o gerenciamento de erros que possam surgir.

3. Manipulando erros síncronos e assíncronos usando blocos Try-Catch

Manuseio programação síncrona e assíncrona erros usando blocos try-catch é uma técnica eficaz no Express.js. Para código síncrono, você pode gerenciar erros agrupando a seção potencialmente propensa a erros em um bloco try-catch.

Aqui está um exemplo de código mostrando blocos try-catch em uso:

app.get('/data', (req, res) => {
try {
// code that may cause an error
const result = someFunction();
res.json(result);
} catch (error) {
console.error('Error occurred:', error);
res.status(500).json({ message: 'An error occurred.' });
}
});

No entanto, ao trabalhar com operações assíncronas, como consultas de banco de dados ou usando Axiospara consumir APIs, apenas blocos try-catch podem não ser suficientes. Nesses casos, agora você pode integrar o assíncrono e aguarde palavras-chave dentro dos blocos para lidar com erros com mais eficiência.

Aqui está um código de amostra:

app.get('/data', async (req, res) => {
try {
const data = await fetchDataFromDatabase();
res.json(data);
} catch (error) {
console.error('Async Error:', error);
res.status(500).json({ message: 'Error occurred fetching data.' });
}
});

4. Criando middleware de tratamento de erros personalizado

O middleware personalizado de tratamento de erros permite que você defina como seu programa trata erros e suas respostas correspondentes, de acordo com os requisitos de seu aplicativo.

Ao criar funções de middleware de tratamento de erros, você pode centralizar e personalizar o gerenciamento de erros, garantindo uma abordagem mais organizada e personalizada para lidar com erros em todo o aplicativo.

Aqui está um exemplo de código de função de middleware personalizado:

// Custom middleware for handling not found errors
const notFoundHandler = (req, res, next) => {
const resource = req.params.resource;

if (resource 'users') {
return res.status(404).json({ message: 'User not found.' });
} elseif (resource 'products') {
return res.status(404).json({ message: 'Product not found.' });
} else {
return res.status(404).json({ message: 'Requested resource not found.' });
}
};

app.use('/api/:resource', notFoundHandler);

Neste exemplo, o notFoundHandler função verifica o recurso parâmetro na URL da solicitação. Dependendo do valor fornecido, a função do manipulador responde com mensagens de erro personalizadas para diferentes tipos de recursos, como usuários e produtos.

Para qualquer outro recurso não manipulado explicitamente, ele fornece uma mensagem de erro genérica. Como alternativa, dentro desse middleware, você também pode optar por rotear os usuários para páginas de erro personalizadas que os ajudam a resolver os problemas encontrados.

Ao usar esse middleware personalizado de tratamento de erros, você pode adaptar o gerenciamento de erros e as respostas a diferentes situações, tornando o tratamento de erros mais específico e informativo.

Em um ambiente de produção, é essencial implementar registro e monitoramento de erros para acompanhar os erros do aplicativo. Algumas ferramentas eficazes que você pode usar incluem Winston e Morgan, entre outros. Essas ferramentas registram erros em um arquivo, um servidor centralizado ou uma plataforma de monitoramento, permitindo que você identifique e resolva problemas rapidamente.

Aqui está um exemplo de como você pode usar o Winston em um aplicativo Express.js para log de erros:

const winston = require('winston');
const expressWinston = require('express-winston');

app.use(expressWinston.errorLogger({
// Error logging middleware using Winston
}));

Gerenciamento de erros em aplicativos de back-end

A implementação de técnicas eficientes de gerenciamento de erros e procedimentos à prova de falhas é essencial na criação de aplicativos de back-end robustos.

Nos aplicativos Express.js, é importante antecipar, planejar e implementar técnicas eficazes de tratamento de erros que permitirão identificar, gerenciar e responder rapidamente aos erros. Isso garantirá uma experiência mais confiável e amigável para seus usuários.