Express에서 오류를 처리하는 다양한 방법

다른 방법으로 오류를 처리해야 할 때 때때로 혼란스러워집니다. 이 게시물에서는 Express.js에서 오류를 처리하는 다양한 방법과 각 방법을 사용하는 경우에 대해 설명합니다.

어쨌든 오류를 처리해야 하는 이유는 무엇입니까?


  • 모든 사용자가 자신의 입력에 문제가 있을 수 있다는 것을 아는 것은 아니며 서비스가 다운되었다고 생각할 수도 있습니다.
  • 비교적 친근한 방식으로 사용자에게 문제가 발생했으며 행동 방식을 변경해야 함을 알립니다.
  • 프로그래머가 문제를 디버깅하는 데 도움이 되는 몇 가지 세부 사항을 추가할 수 있습니다.
  • 일부 오류로 인해 서버가 다운됩니다.

  • 이제 모든 방법에서 동일한 기능을 사용하므로 각 방법의 차이점이 명확해집니다.

    기능은 간단하며 데이터를 데이터베이스에 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를 참조하세요.
    기사가 마음에 들면 좋아요로 저를 지원할 수 있습니다.

    좋은 웹페이지 즐겨찾기