NodeJS Express의 예외 처리
4059 단어 beginnersnodeprogramming
오류 디버깅은 프로그래밍에서 가장 어려운 부분입니다. 오류는 구문 오류, 논리 오류 또는 가장 무서운 런타임 오류 등 다양한 방식으로 코드에 나타날 수 있습니다. 런타임 오류는 응용 프로그램에서 예기치 않은 일이 발생할 때마다 발생하며 종종 프로그램을 중단시킬 수 있는 치명적인 문제로 이어집니다.
많은 언어와 마찬가지로 Node.js는 오류가 발생하기 전에 예측하는 메커니즘을 제공합니다. 코드에서 오류가 발생하면 예외라는 개체가 됩니다. 이러한 예외를 적절하게 처리하면 예기치 않은 문제로부터 정상적으로 복구할 수 있으므로 훨씬 더 나은 사용자 경험을 얻을 수 있습니다.
목차
예외 만들기
예외는 throw 키워드를 사용하여 생성됩니다.
JavaScript가 이 줄을 실행하는 즉시 정상적인 프로그램 흐름이 중단되고 가장 가까운 예외 처리기로 제어가 보류됩니다.
일반적으로 클라이언트 측 코드에서 값은 문자열, 숫자 또는 객체를 포함한 모든 JavaScript 값이 될 수 있습니다.
Node.js에서는 문자열을 던지지 않고 Error 객체만 던집니다.
오류 객체
오류 객체는 Error 객체의 인스턴스이거나 Error 코어 모듈에서 제공되는 Error 클래스를 확장하는 객체입니다.
예외 처리
예외 핸들러는 try/catch 문입니다.
try 블록에 포함된 코드 줄에서 발생한 모든 예외는 해당 catch 블록에서 처리됩니다.
try {
// lines of code
} catch (e) {}
이 예에서 e는 예외 값입니다.
다양한 종류의 오류를 포착할 수 있는 여러 핸들러를 추가할 수 있습니다.
약속이 있는 예외
약속을 사용하면 여러 작업을 연결하고 마지막에 오류를 처리할 수 있습니다.
performFunction1()
.then(performFunction2)
.then(performFunction3)
.catch(err => console.error(err));
어디에서 오류가 발생했는지 어떻게 알 수 있습니까? 실제로는 모르지만 호출하는 각 함수(performfunction(x))에서 오류를 처리할 수 있고 오류 처리기 내부에서 새 오류를 발생시켜 외부 catch 처리기를 호출할 수 있습니다.
const performFunction1 = () => {
// ...
try {
// ...
} catch (err) {
// ... handle it locally
throw new Error(err.message);
}
// ...
};
우리가 호출하는 함수에서 오류를 처리하지 않고 로컬에서 오류를 처리할 수 있도록 체인을 끊을 수 있습니다. 각 then()에서 함수를 만들고 예외를 처리할 수 있습니다.
performFunction1()
.then(() => {
return performFunction2().catch(err => {
// handle error
throw err; // break the chain!
});
})
.then(() => {
return performFunction3().catch(err => {
// handle error
throw err; // break the chain!
});
})
.catch(err => console.error(err));
익스프레스에서 오류 처리
오류 처리는 Express가 동기식 및 비동기식으로 발생하는 오류를 포착하고 처리하는 방법을 나타냅니다. Express는 기본 오류 처리기와 함께 제공되므로 시작하기 위해 직접 작성할 필요가 없습니다.
Express가 경로 핸들러 및 미들웨어를 실행하는 동안 발생하는 모든 오류를 포착하는지 확인하는 것이 중요합니다.
경로 처리기 및 미들웨어 내부의 동기 코드에서 발생하는 오류는 추가 작업이 필요하지 않습니다. 동기 코드에서 오류가 발생하면 Express가 오류를 포착하여 처리합니다. 예를 들어:
app.get('/', (req, res) => {
throw new Error('BROKEN') // Express will catch this on its own.
})
라우트 핸들러 및 미들웨어에 의해 호출된 비동기 함수에서 반환된 오류의 경우 Express가 오류를 포착하고 처리하는 next() 함수로 전달해야 합니다. 예를 들어:
app.get('/', (req, res, next) => {
fs.readFile('/file-does-not-exist', (err, data) => {
if (err) {
next(err) // Pass errors to Express.
} else {
res.send(data)
}
})
})
Promise를 반환하는 비동기 코드, 경로 처리기 및 미들웨어의 오류는 오류를 거부하거나 throw할 때 next(value)를 자동으로 호출합니다. 예를 들어:
app.get('/user/:id', async (req, res, next) => {
try{
const user = await getUserById(req.params.id)
res.send(user)}
catch(err){next(err)}
})
Reference
이 문제에 관하여(NodeJS Express의 예외 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/folacode22/handling-exception-in-nodejs-express-4kdo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)