2017-12-16 26 views
0

데이터베이스 작업을 수행 할 때 발생하는 오류를 처리하기 위해 플로우 패턴을 개발하려고합니다. 나는 조금 길어졌지만, 나는 그걸 알아내는 것에 아주 가깝다고 생각한다. 내가 라우터 내에서 호출 할 경우Expressjs : DB 연산의 오류 처리 (다음은 정의되지 않음)

다음
exports.deleteAttorney = function (id, cb) { <-- I am not using cb. Do I need it? 

    let query = { 
     _id: "6a34056376bbd68eb1ccdf11" 
    }; 

    Firm.Firm.findOne(query, "attorneys", function (err, firm) { 

     if (err || !firm) { 
      return next(err || new Error("deleteAttorney() could not retrieve the firm's attorneys.")); 
     } 

     firm.attorneys.id(id).remove(); 

     firm.save(function (err) { 
      if (err) { 
       return next(err); 
      } 
     }); 
    }); 
} 

은 다음과 같습니다 : 여기

https://codereview.stackexchange.com/questions/65199/mongoose-promise-error-handling는 몽구스 스키마 내 기능입니다 : 이것은 내가 모방 시도 된 예이다

router.post('/delete', function(req, res) { 

    Attorney.deleteAttorney(req.query._id, function(err) { 
     if (err) { 
      console.error(err); <-- I intend to put some user-friendly messaging here 
     } 

     res.redirect('/attorneys/manage'); 
    }); 

}); 

"다음"은 정의되지 않습니다. 나는 그것을 어떻게 사용하는지 완전히 이해하지 못하고, 그것이 전혀 사용되어야하는지 확신 할 수 없다.

내가 원하는 것은 데이터를 가져 오기위한 시도입니다. 시도가 성공한 후 (성공했는지 여부에 관계없이), 표시된 콜백이 실행되기를 원합니다. 모델의 메서드 내에서 콜백에 오류를 반환해야하는 것처럼 보입니다. 그러나 확실하지 않습니다.

나쁜 접근법을 사용하는 경우 어떻게해야합니까?

편집

조쉬의 대답은 CB와() 다음 교체에 대한 나의 의심을 확인 도움(). 다음은 수정 된 코드입니다. 그것은 작동합니다. 이것은 좋은 연습처럼 보입니까? 그렇다면 모든 DB 작업에 동일한 패턴을 사용할 것입니다. 나는 이것에 정착 할 때까지 나머지 부분에 뛰어 들기를 원하지 않는다. 당신은 당신이 next를 호출 할 때, 호출 할 무엇

exports.deleteAttorney = function (id, cb) { 

    let query = { 
     _id: "6a34056376bbd68eb1ccdf11" 
    }; 

    Firm.Firm.findOne(query, "attorneys", function (err, firm) { 

     if (err || !firm) { 
      cb(err || new Error("deleteAttorney() could not retrieve the firm's attorneys.")); 
      return; 
     } 

     firm.attorneys.id(id).remove(); 

     firm.save(function (err, firm, numAffected) { 
      cb(err, firm, numAffected); 
      return; 
     }); 
    }); 
} 

답변

0

정말 cb입니다. 그래서 그들 중 하나의 이름을 바꿉니다. 또한 오류가 발생했을 때 next에 전화 할뿐만 아니라 작업이 성공적으로 수행 된 경우에도 전화해야합니다. 그렇지 않으면 리디렉션이 절대 호출되지 않습니다.

Node.js의 기본 요소 인 콜백을 이해하고 오류 첫 번째 패턴을 살펴 보는 것이 좋습니다. 어쩌면이 article이 도움이됩니다.

+0

감사합니다. Josh. 나는 꽤 많이 읽었으며,이 포스트는 모든 것을 집중적으로 다루려고 시도했다. 제 편집을보고 약간의 정보를 제공 할 수 있습니까? –

+0

괜찮아 보입니다. 인수를 변경하지 않기 때문에'firm.save (cb)'라고 쓸 수도 있습니다. – Josh