Node.js에서 에러 처리는 매우 중요한 부분으로, 아래 Node.js 예제에서는 에러를 처리하는 다양한 방법과 미들웨어를 통한 에러 처리 기법이 있습니다.
1. 기본적인 에러 처리
Node.js에서는 try...catch 블록을 사용해 동기 코드에서 발생하는 에러를 처리할 수 있습니다.
try {
// 에러가 발생할 수있는 코드
const result = riskFunction();
} catch (error) {
console.error("에러 발생:", error);
}
비동기 코드에서 Promise의 .catch() 메서드를 사용하거나 async/await를 사용할 때는 try...catch를 활용할 수 있습니다.
async function example() {
try {
const result = await errorAsyncFunction();
} catch (error) {
console.error("에러 발생", error);
}
}
2. 에러 핸들링 기법
- Cunstorm Error Classes: 사용자 정의 에러 클래스를 만들어 특정 에러를 정의할 수 있습니다.
class ErrorHandle extends Error {
constructor(message) {
super(message);
this.name = this.constructor.name;
}
}
throw new ErrorHandle("사용자 정의 에러 발생");
- Logging: 에러를 로깅해 추후 분석할 수 있도록 합니다. winston이나 morgan 같은 로깅 라이브러리를 사용할 수 있음
3. 미들웨어를 통한 에러 처리
Express.js와 같은 프레임워크에서는 미들웨어를 사용하여 중앙 집중식으로 에러를 처리할 수 있습니다.
const express = require("express");
const app = express();
// 일반 라우터
app.get("/", (req, res) => {
throw new Error("에러 발생");
});
// 에러 처리 미들웨어
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send("Server Error!");
});
// 서버 시작
app.listen(3000, () => {
console.log(`Server is running port 3000!`);
});
4. 비동기 에러 처리
비동기 함수에서 발생한 에러는 next() 함수를 통해 에러 처리 미들웨어로 전달할 수 있습니다.
app.get("/async", async (req, res, next) => {
try {
const data = await someAsyncFunction();
res.send(data);
} catch (error) {
next(error); // 에러를 미들웨어로 전달
}
});
5. 에러 종류에 따른 처리
에러의 종류에 따른 응답을 할 수 있습니다. 예를 들어, 클라이언트 에러를 구분하여 처리할 수 있습니다.
// 에러 종류에 따른 처리
app.use((err, req, res, next) => {
if (err instanceof CustomError) {
res.status(400).send({ error: err.message });
} else {
res.status(500).send("server Error!");
}
});
6. 에러 클래스 선언 예제
Node.js 에서 사용자 에러 처리(Custorm Error)를 선언하는 방법은 다음과 같습니다. 사용자 정의 에러를 만들면 특정 에러 상황에 대해 더 구체적이고 의미 있는 정보를 제공할 수 있습니다.
- Error 클래스 상속받기: 사용자 정의 에러 클래스를 만들기 위한 기본 Error 클래스를 상속
- 생성자에서 메시지와 기타 속성 설정하기: 생성자에서 메시지를 설정하고, 필요한 경우 다른 속성도 추가 가능
class CustomError extends Error {
constructor(message, statusCode) {
super(message); // 부모 클래스의 생성자 호출
this.name = this.constructor.name; // 에러 이름 설정
this.statusCode = statusCode; // 추가 속성 설정
Error.captureStackTrace(this, this.constructor); // 스택 트레이스 캡처
}
}
// 사용 예시
function riskFunction() {
throw new CustomError("사용자 정의 에러 발생", 400);
}
try {
riskFunction();
} catch (error) {
console.error(`Error Name: ${error.name}`);
}
- CustomError 클래스: Error 클래스를 상속받아 사용자 정의 에러 클래스 생성, statusCode 속성을 추가해 HTTP 상태 코드 같은 추가 정보를 저장할 수 있음
- Errror.captureStackTrace: 이 메서드는 에러 객체의 스택 트레이스를 캡쳐하여 디버깅에 유용
- 사용 예시: riskFunction에서 CustomError를 발생시키고, 이를 try..catch 블록에서 처리해 에러 정보를 출력
GitHub - nodeJsroom/node-js-bloging
Contribute to nodeJsroom/node-js-bloging development by creating an account on GitHub.
github.com
LIST
'Back-End > Node.js' 카테고리의 다른 글
[NodeJS] 9장(완) 추가 학습하기 (0) | 2025.03.03 |
---|---|
[NodeJs] 8장 Docker(도커)를 사용한 배포 (0) | 2025.03.02 |
[NodeJS] 6장 인증 및 보안 (0) | 2025.02.26 |
[NodeJS] 5장 데이터베이스 연동하기 (0) | 2025.02.25 |
[NodeJS] 4장 Express.js 프레임워크 (0) | 2025.02.23 |