In Node.js, sollte ich Fehler für die Ablaufsteuerung verwenden, oder sollte ich sie eher als Ausnahmen verwenden?Best Practices für NodeJS: Fehler für die Ablaufsteuerung?
Ich schreibe einen Authentifizierungs-Controller und einige Komponententests in Sails.js, und derzeit überprüft meine Registrierungsmethode, ob ein Benutzer mit demselben Benutzernamen existiert. Wenn ein Benutzer bereits mit dem Benutzernamen vorhanden ist, ruft mein Modell Methode seine Rückruf Argumente mit einem neuen Error-Objekt, etwa so:
Modell:
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);
});
},
Controller:
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
});
});
});
Ist das beste trainieren? Ich bin mir nicht sicher, ob Knotenkonventionen Fehler für Ausnahmefälle oder für die Ablaufsteuerung bevorzugen. Ich denke, ich sollte das umschreiben, aber ich möchte Konventionen kennen, bevor ich das tue. Ich glaube, ich habe einige Beispiele in Sails gesehen. Vielen Dank!
Eine viel einfachere Weg ist, um Flagge der 'username' als einzigartig in der Modellschema und einfach die Verwendung Fehler Mongoose kehrt in Ihrem 'User.create()' Controller zurück, um mit einem 409 zu antworten. Dies ist ein optimistischerer Ansatz, denn wenn der Benutzer nicht existiert und eine gültige Anfrage vorliegt, treffen Sie die DB nicht zweimal ohne Grund . – srquinn
@jibsales Das macht Sinn - aber was passiert dann, wenn es einen anderen Fehler gibt, der eine 500-Antwort erfordert?In Sprachen wie C# gibt es verschiedene Arten von Ausnahmen und Sie können nach diesem Typ suchen. Ich weiß, dass ich so etwas in Node machen könnte, wenn ich es möchte, aber ist das allgemein üblich? Die Entscheidung, die ich jetzt treffe, beeinflusst die Art, wie ich den Rest der Anwendung erstelle. Basierend auf Ihrem Kommentar scheint es so, als ob Knoten Fehler für die Flusskontrolle anstelle von Ausnahmesituationen verwendet. –
Siehe meine Antwort unter – srquinn