데이터베이스 작업을 수행 할 때 발생하는 오류를 처리하기 위해 플로우 패턴을 개발하려고합니다. 나는 조금 길어졌지만, 나는 그걸 알아내는 것에 아주 가깝다고 생각한다. 내가 라우터 내에서 호출 할 경우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;
});
});
}
감사합니다. Josh. 나는 꽤 많이 읽었으며,이 포스트는 모든 것을 집중적으로 다루려고 시도했다. 제 편집을보고 약간의 정보를 제공 할 수 있습니까? –
괜찮아 보입니다. 인수를 변경하지 않기 때문에'firm.save (cb)'라고 쓸 수도 있습니다. – Josh