|익스프레스| 익스프레스: 오류 처리
8339 단어 htmlwebdevcssjavascript
-Express Built-In Error Handler
-Defining Custom Error Handlers
-Our Custom Error Class
-Handling Async Errors
-Handling More Async Errors
-Defining An Async Utility
익스프레스 내장 오류 처리기
Express 애플리케이션 내에서 발생하는 대부분의 일반적인 오류는 불완전한 데이터, 데이터베이스, API, 외부 서비스 및 라이브러리와의 연결 또는 상호 작용 문제로 인해 발생할 수 있습니다. 또한 최종 사용자는 우발적 또는 의도적으로 응용 프로그램 내에서 알려지지 않은 버그를 발견할 수 있습니다.
오류가 의도적으로 발생했거나 명시적이지 않은 경우 오류를 포착하고 자체 내장된 오류 처리 기능으로 응답합니다. Express는 기본적으로 상태 코드 500을 사용하지만 상태 코드를 변경할 수 있습니다. 오류 응답에는 개발자 모드에 있을 때 스택 추적도 포함됩니다.
사용자 지정 오류 처리기 정의
사용자 지정 오류 처리기를 작성하려면 err, req, res, next의 네 가지 함수가 필요합니다. 코드 내의 모든 app.use 문 뒤에 마지막에 넣어야 합니다.
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
맞춤형 오류 클래스
상태 코드와 응답으로 오류에 응답해야 합니다. Express에서 작업할 때 프로세스를 달성하는 방법에는 여러 가지가 있습니다. 응답을 템플릿과 함께 사용하여 더 많은 정보를 추가할 수 있습니다.
일반적인 메시지는 서버 측에서 문제가 발생했음을 의미하는 상태 코드 오류 500일 수 있습니다. 상태 코드 401은 승인되지 않았거나 승인되지 않았음을 의미합니다.
비동기 오류 처리
이 코드는 개념적 연습을 위한 것일 뿐이며 프로젝트나 애플리케이션의 일부가 아닙니다.
app.get('/products/new', (req, res) => {
throw new AppError('Not Allowed, 401)
res.render('products/new', { categories })
})
app.use((err, req, res, next) => {
const {status = 500, message = 'Something went wrong'} = err;
res.status(status).send(message);
})
app.get('/products/:id', async (req, res) => {
const { id } = req.params;
const product = await Product.findById(id)
if (!product) {
throw new AppError('Product Not Found, 404)
}
res.render('products/show', { product })
})
더 많은 비동기 오류 처리
비동기 오류를 처리하려면 try/catch 문을 사용해야 합니다.
이 코드는 개념적 연습을 위한 것일 뿐이며 프로젝트나 애플리케이션의 일부가 아닙니다.
app.post('/products', async (req, res) => {
try {
const newProduct = new Product(req.body);
await newProduct.save();
res.redirect(`/products/${newProduct._id}`)
} catch(e) {
next(e);
}
})
app.get('/products/:id', async (req, res, next) => {
try {
const { id } = req.params;
const product = await Product.findById(id)
if (!product) {
throw new AppError('Product Not Found', 404);
}
res.render('/products/show', { product })
} catch (e) {
next(e);
}
})
비동기 유틸리티 정의
try/catch를 사용하는 것보다 오류를 처리하는 더 좋은 방법이 있습니다. 오류를 포착할 비동기 콜백을 래핑하는 함수 만들기.
function wrapAsync(fn) {
return function(req, res, next) {
fn(req, res, next).catch(e => next(e))
}
}
app.get('/products/:id', wrapAsync(async, req, res, next) => {
const { id } = req.params;
const product = await Product.findById(id)
if (!product) {
throw new AppError('Product Not Found', 404);
}
res.render('/products/show', { product })
}
})
Reference
이 문제에 관하여(|익스프레스| 익스프레스: 오류 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/code_regina/express-express-handling-errors-241o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)