W pliku Node.js powinienem użyć błędów do sterowania przepływem lub czy powinienem używać ich bardziej jak wyjątków?Najlepsze praktyki NodeJS: Błędy kontroli przepływu?
Piszę kontroler uwierzytelniania i niektóre testy jednostkowe w Sails.js, a obecnie moja metoda rejestracji sprawdza, czy istnieje użytkownik o tej samej nazwie użytkownika. Jeśli użytkownik już istnieje z nazwą użytkownika, moja metoda Model nazywa swoje argumenty wywołania zwrotnego z nowego obiektu Error tak:
Model:
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);
});
},
Kontroler:
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
});
});
});
Jest to najlepszy ćwiczyć? Nie jestem pewien, czy konwencje węzłów faworyzują błędy w wyjątkowych przypadkach lub kontroli przepływu. Myślę, że powinienem to przerobić, ale zanim to zrobię, chcę poznać konwencje. Myślę, że widziałem kilka przykładów napisanych w ten sposób w Żagle. Dzięki!
Znacznie prostszym sposobem jest banderą 'username' jako unikalna w schemacie modelu i po prostu użyć error Mongoose zwraca w swoim kontrolerze 'User.create()', aby odpowiedzieć 409. Jest to podejście bardziej optymistyczne, ponieważ jeśli użytkownik nie istnieje i jest to ważne żądanie, nie trafiasz dwukrotnie do DB bez powodu . – srquinn
@jibsales To ma sens - ale co się stanie, jeśli wystąpi inny błąd, który wymagać będzie odpowiedzi 500?W językach takich jak C# istnieją różne rodzaje wyjątków i można sprawdzić ten typ. Wiem, że mogłem zrobić coś takiego w Node, gdyby chciałem, ale czy jest to powszechna praktyka? Decyzja, którą podejmuję teraz, wpłynie na sposób, w jaki buduję resztę aplikacji. Na podstawie Twojego komentarza wydaje się, że Węzeł używa błędów do kontroli przepływu zamiast wyjątkowych sytuacji. –
Zobacz moją odpowiedź poniżej – srquinn