> 웹 프론트엔드 > JS 튜토리얼 > 강력한 Node.js 애플리케이션을 위해 Express.js의 고급 오류 처리 마스터하기

강력한 Node.js 애플리케이션을 위해 Express.js의 고급 오류 처리 마스터하기

Susan Sarandon
풀어 주다: 2024-12-07 19:04:20
원래의
345명이 탐색했습니다.

Mastering Advanced Error Handling in Express.js for Robust Node.js Applications

오류 처리는 강력한 Express.js 애플리케이션을 개발하는 데 있어 중요한 측면입니다. 처리되지 않은 예외 포착, 사용자 입력 유효성 검사, 타사 API 오류의 적절한 관리 등 세심하게 계획된 오류 처리 전략을 사용하면 디버깅 시간을 절약하고 원활한 사용자 경험을 보장할 수 있습니다. 이 블로그에서는 실제 사례를 바탕으로 Express.js의 오류 처리를 위한 고급 기술을 살펴보겠습니다.

오류 처리가 중요한 이유
소프트웨어 개발에서 오류는 피할 수 없지만 좋은 응용 프로그램과 훌륭한 응용 프로그램을 구분하는 것은 오류를 얼마나 효과적으로 관리하느냐에 달려 있습니다. 고급 오류 처리에 투자해야 하는 주요 이유는 다음과 같습니다.

  • 향상된 디버깅: 문제의 근본 원인을 빠르게 식별합니다.
  • 향상된 사용자 경험: 사용자에게 친숙한 오류 메시지를 전달합니다.
  • 보안: 오류 응답 시 민감한 데이터 노출을 방지합니다.

중앙 집중식 오류 처리기 설정

중앙 집중식 오류 처리 미들웨어는 Express.js 앱 전체의 오류 관리를 단순화합니다.

만드는 방법은 다음과 같습니다.

// errorHandler.js
const errorHandler = (err, req, res, next) => {
  console.error(err.stack);

  const statusCode = err.status || 500; // Default to 500 for unexpected errors
  const message = err.message || 'Internal Server Error';

  res.status(statusCode).json({
    success: false,
    message,
  });
};

module.exports = errorHandler;

로그인 후 복사

앱에서의 사용법:

const express = require('express');
const errorHandler = require('./middleware/errorHandler');

const app = express();

// Your routes go here

app.use(errorHandler); // Centralized error handler
app.listen(3000, () => console.log('Server running on port 3000'));

로그인 후 복사

미들웨어로 비동기 오류 처리

도우미 함수를 사용하여 비동기 경로 핸들러에서 try-catch 블록을 중복하지 마세요.

const asyncHandler = (fn) => (req, res, next) =>
  Promise.resolve(fn(req, res, next)).catch(next);

로그인 후 복사

사용 예:

app.get('/data', asyncHandler(async (req, res) => {
  const data = await fetchData(); // Assume this is an async function
  res.json({ success: true, data });
}));

로그인 후 복사

이 접근 방식을 사용하면 fetchData의 모든 오류가 중앙 집중식 오류 처리기에 자동으로 전달됩니다.

Express.js의 오류 처리를 위한 인기 라이브러리: express-async-errors

express-async-errors 라이브러리는 Express.js 애플리케이션 내 비동기 코드의 오류를 처리하기 위해 간단하고 널리 사용되는 솔루션입니다.

설치:

npm install express-async-errors
로그인 후 복사

사용법:

require('express-async-errors'); // Import the library
const express = require('express');
const app = express();

app.get('/data', async (req, res) => {
  const data = await fetchData(); // If this fails, the error is handled automatically
  res.json({ success: true, data });
});

// Centralized error handler
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ success: false, message: 'Something went wrong!' });
});

app.listen(3000, () => console.log('Server running on port 3000'));

로그인 후 복사

express-async-errors 라이브러리는 비동기 함수의 오류를 원활하게 처리하여 코드 가독성을 높이고 상용구를 줄입니다.

발견되지 않은 오류 처리

앱이 처리되지 않은 거부 및 포착되지 않은 예외를 처리하는지 확인하세요.

process.on('unhandledRejection', (reason, promise) => {
  console.error('Unhandled Rejection:', reason);
  // Add your cleanup logic here
  process.exit(1);
});

process.on('uncaughtException', (err) => {
  console.error('Uncaught Exception:', err);
  // Add your cleanup logic here
  process.exit(1);
});

로그인 후 복사

라이브러리의 유효성 검사 오류

입력 검증을 위해 Joi와 같은 라이브러리를 활용하고 오류 처리를 원활하게 통합합니다.

Joi의 예:

const Joi = require('joi');

const validateUser = (req, res, next) => {
  const schema = Joi.object({
    name: Joi.string().min(3).required(),
    email: Joi.string().email().required(),
  });

  const { error } = schema.validate(req.body);
  if (error) {
    return next(new Error(error.details[0].message));
  }

  next();
};

app.post('/user', validateUser, (req, res) => {
  res.json({ success: true, message: 'User created successfully!' });
});

로그인 후 복사

Express.js의 오류 처리 모범 사례

  • 민감한 정보를 유출하지 마세요. 프로덕션에서 스택 추적이나 데이터베이스 세부 정보가 노출되지 않도록 하세요.
  • 적절한 HTTP 상태 코드 사용: 응답이 올바른 상태 코드를 사용하는지 확인하세요(예: 클라이언트 오류의 경우 400, 서버 오류의 경우 500).
  • 효과적인 오류 기록: 프로덕션 수준의 오류 로깅을 위해 Winston 또는 Pino와 같은 로깅 라이브러리를 사용하세요.
  • 오류 처리 테스트: 개발 중 오류를 시뮬레이션하여 처리기가 예상대로 작동하는지 확인하세요.

이 블로그가 도움이 되었다면 ❤️ 좋아요를 누르고 팔로우하여 더 많은 JavaScript 팁과 요령을 확인하세요!

위 내용은 강력한 Node.js 애플리케이션을 위해 Express.js의 고급 오류 처리 마스터하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿