Express에서 오류를 처리하는 다양한 방법
13533 단어 nodeprogrammingjavascript
어쨌든 오류를 처리해야 하는 이유는 무엇입니까?
이제 모든 방법에서 동일한 기능을 사용하므로 각 방법의 차이점이 명확해집니다.
기능은 간단하며 데이터를 데이터베이스에 POST하는 API입니다.
router.post('/article', async (req, res) => {
title = req.body.title
content = req.body.content
const newPost = await new Post({
title: title,
content: content
})
newPost.save()
res.status(201).json(newPost)
})
이제 이 코드는 사용자가 올바른 방식으로 사용한 경우에만 훌륭하게 작동하며, 콘텐츠나 제목을 제공하지 않으면 서버가 중단됩니다. 물론 우리는 이것이 필요하지 않습니다!
1- Try-Catch 문 사용
이것은 가장 인기있는 것이며 아마도 알아 냈을 것입니다.
router.post('/article', async (req, res) => {
title = req.body.title
content = req.body.content
try {
const newPost = await new Post({
title: title,
content: content
})
newPost.save()
res.status(201).json(newPost)
} catch (err) {
console.log(err)
res.status(400).json({"Something went wrong":err.message})
}
})
이 방법에서는 함수가 수행해야 하는 모든 작업을 시도합니다. 오류가 있으면 CATCH 문에서 오류를 포착한 다음 상태 코드 400 "잘못된 요청"과 오류 메시지를 사용자에게 반환하여 사용자가 다음을 수행할 수 있도록 합니다. 그가 무엇을 잘못했는지 알고 있습니다.
2- 함수에서 약속 사용
express의 대부분의 함수는 여기에서 사용하는 함수
.save()
와 같은 인수를 취하는 약속입니다.다음과 같은 매개변수에 오류가 있으면 오류를 얻을 수 있습니다
.save((err))
. 여기에서 오류를 포착하고 이와 같이 사용할 수 있습니다.router.post('/article', async (req, res) => {
title = req.body.title
content = req.body.content
const newPost = new Post({
title: req.body.title,
content: req.body.content
})
newPost.save((err) => {
if (!err) {
res.status(201).json(newPost)
} else {
console.log(err)
res.status(400).json({
"Something went wrong":err.message})
}
})
})
여기에서
(!err)
로 오류가 없는지 확인합니다. 오류가 있으면 이전과 같이 처리합니다.3- 약속 사용
router.post('/article', async (req, res) => {
title = req.body.title
content = req.body.content
const newPost = new Post({
title: title,
content
})
newPost.save()
.then (result => {
res.status(201).json(newPost)
})
.catch(err => {
console.log(err)
res.status(400).json({"Something went wrong":err.message})
})
})
이것은 try-catch와 매우 유사하지만 여기서는 약속을 사용하고 있습니다.
4- 사용자 정의 방법 사용
이 방법에서 우리는 그것이 자주 발생할 수 있다는 것을 알고 있는 오류를 확인하거나 매우 맞춤화된 방식으로 처리합니다. 예를 들어 기사를 얻으려고 할 때 사용자가 기사를 얻으려고 시도할 수 있다는 것을 알고 있습니다. 존재하므로 이 오류를 구체적으로 처리해야 합니다. 이 예에서는 사용자가 요청 본문에 콘텐츠나 제목을 제공하지 않는다고 가정합니다.
router.post('/article', async (req, res) => {
title = req.body.title
content = req.body.content
if (!content || !title) {
res.status(400).json({
"error":"You must provide content and title"})
}
// Rest of the code with any method we used
})
이 예에서는 if 문
(!content || !title)
을 사용하여 사용자가 콘텐츠나 제목을 제공하지 않았는지 확인합니다. 이렇게 하면 사용자에게 콘텐츠와 제목을 제공해야 한다고 알립니다.결론
어떤 방법을 사용해도 상관없지만 개인 취향에 따라 큰 차이는 없습니다.
자세한 내용은 익스프레스 문서 페이지의 오류 처리docs를 참조하세요.
기사가 마음에 들면 좋아요로 저를 지원할 수 있습니다.
Reference
이 문제에 관하여(Express에서 오류를 처리하는 다양한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mazenr/different-methods-for-handling-errors-in-express-2ld텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)