Node.js에서 흐름 제어에 오류를 사용해야합니까, 아니면 예외처럼 사용해야합니까?NodeJS 모범 사례 : 흐름 제어 오류?
Sails.js에 인증 컨트롤러와 일부 단위 테스트를 작성하고 있으며 현재 내 등록 방법이 동일한 사용자 이름을 가진 사용자인지 확인합니다. 사용자가 이미 사용자 이름으로 존재하는 경우, 내 모델 방법과 같이, 새로운 Error 객체에 콜백 인수를 호출
모델 :
exists: function (options, cb) {
User.findOne({
where: { username: typeof options === 'Object' && options.username ? options.username : options },
}).exec(function (err, user) {
if (err) return cb(err);
if (user) return cb(new Error("A user with that username already exists."));
cb(null, !!user);
});
},
컨트롤러 :
User.exists(req.body.user.username, function (err, exists) {
if (err) {
console.log("error: ", err);
return res.status(409).json({
message: err
});
}
User.create(req.user).then(function (data) {
res.status(201).json({
user: data
});
});
});
이 최고입니다 연습? 노드 규칙이 예외적 인 경우 또는 흐름 제어에 오류를 선호하는지 잘 모르겠습니다. 나는 이것을 다시 써야한다고 생각하지만, 그렇게하기 전에 관례를 알고 싶다. 나는 돛에 이런 식으로 쓰여진 몇 가지 예를 보았다고 생각합니다. 감사! 프로그램에 오류에 더 많은 의미 론적 의미를 부여하는
if (something_went_wrong) {
throw new Error('Doh!');
}
당신은 또한 기본 오류 개체에 추가 매개 변수를 추가 할 수 있습니다
훨씬 간단한 방법은 플래그 모델 스키마의'username' 같은 고유 단순히를 사용 오류 Mongoose는'User.create()'컨트롤러에서 409로 응답하도록 반환합니다. 이것은 사용자가 존재하지 않고 유효한 요청인데도 아무 이유없이 DB를 두 번 치지 않기 때문에보다 낙관적 인 방법입니다 . – srquinn
@jibsales 그렇다면 500 응답을 필요로하는 다른 오류가있는 경우 어떻게됩니까?C#과 같은 언어에는 여러 가지 예외가 있으며 해당 유형을 확인할 수 있습니다. 내가 원한다면 노드에서 그와 비슷한 것을 할 수 있다는 것을 알고 있지만 그 일반적인 관행은 무엇입니까? 제가 지금 결정한 사항은 나머지 신청서를 작성하는 방식에 영향을 미칩니다. 귀하의 의견을 바탕으로, 노드가 예외 상황 대신 흐름 제어에 오류를 사용하는 것처럼 보입니다. –
내 대답보기 아래 참조 – srquinn