Node.js dosyasında, akış denetimi hataları kullanmalı mıyım yoksa bunları istisnalar gibi mi kullanmalıyım?NodeJS en iyi yöntemler: Akış kontrolü için hatalar?
Sails.js'de bir kimlik doğrulama denetleyicisi ve bazı birim testleri yazıyorum ve şu anda, kayıt yöntemim aynı kullanıcı adına sahip bir kullanıcının olup olmadığını kontrol ediyor. Bir kullanıcı zaten kullanıcı adıyla varsa, benim modeli yöntemi öylesine gibi yeni bir hata nesnesi ile geri arama argümanları çağırır:
Modeli:
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);
});
},
Denetleyici:
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
});
});
});
bu en iyisi bu uygulama? Düğüm sözleşmelerinin istisnai durumlar için hatalardan veya akış kontrolünden yana olup olmadığından emin değilim. Bunu yeniden yazmalıyım, ama bunu yapmadan önce kuralları bilmek istiyorum. Sanırım Sails'de bu şekilde yazılmış bazı örnekler gördüm. Teşekkürler! Programda senin hatalara daha semantik anlam vermek
if (something_went_wrong) {
throw new Error('Doh!');
}
Ayrıca varsayılan hata nesnesine ek parametreleri ekleyebilirsiniz:
Daha basit bir yolu bayrağına modeli şemada 'username' olarak tektir ve sadece kullanım Mongoose, "User.create()' denetleyicinizde 409 ile yanıt vermek için döner. Bu, daha iyimser bir yaklaşımdır, çünkü kullanıcı mevcut değilse ve geçerli bir isteği varsa, DB'yi hiçbir sebepten iki kez vurmazsınız . – srquinn
@jibsales Bu mantıklı - ama sonra, 500 cevabı gerektiren farklı bir hata varsa ne olur?C# gibi dillerde, farklı istisnalar vardır ve bu türü kontrol edebilirsiniz. İstediğimde Düğümde böyle bir şey yapabildiğimi biliyorum, ama bu genel uygulama mı? Şimdi verdiğim karar, uygulamanın geri kalanını oluşturma şeklimizi etkileyecektir. Yorumunuza göre, Node istisnai durumlar yerine akış kontrolü için hatalar kullanıyormuş gibi görünüyor. –
Aşağıdaki cevabımı – srquinn