Trong Node.js, tôi có nên sử dụng các lỗi để kiểm soát luồng không hoặc tôi có nên sử dụng chúng giống như ngoại lệ không?Thực tiễn tốt nhất của NodeJS: Lỗi kiểm soát luồng?
Tôi đang viết bộ điều khiển xác thực và một số kiểm tra đơn vị trong Sails.js và hiện tại, phương thức đăng ký của tôi kiểm tra xem người dùng có cùng tên người dùng đó có tồn tại hay không. Nếu người dùng đã tồn tại với tên người dùng, phương pháp mô hình của tôi gọi đối số gọi lại nó với một đối tượng Lỗi mới, như vậy:
mẫu:
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);
});
},
Bộ điều khiển:
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
});
});
});
là tốt nhất này thực hành? Tôi không chắc liệu quy ước nút có ưu tiên lỗi cho các trường hợp ngoại lệ hay kiểm soát luồng không. Tôi nghĩ tôi nên viết lại điều này, nhưng tôi muốn biết các công ước trước khi tôi làm như vậy. Tôi nghĩ rằng tôi đã nhìn thấy một số ví dụ bằng văn bản theo cách này trong Sails. Cảm ơn!
Một cách đơn giản hơn nhiều là cờ 'cái username' như là duy nhất trong lược đồ mô hình và chỉ cần sử dụng Lỗi Mongoose trả về trong bộ điều khiển 'User.create()' của bạn để đáp ứng với 409. Đây là một cách tiếp cận lạc quan hơn vì nếu người dùng không tồn tại và yêu cầu hợp lệ của nó, bạn không nhấn DB hai lần vì không có lý do . – srquinn
@jibsales Điều đó có ý nghĩa - nhưng sau đó, điều gì sẽ xảy ra nếu có một lỗi khác có thể đòi hỏi một phản ứng 500?Trong các ngôn ngữ như C#, có nhiều loại ngoại lệ khác nhau và bạn có thể kiểm tra loại đó. Tôi biết rằng tôi có thể làm một cái gì đó như thế trong Node nếu tôi muốn, nhưng đó là thực tế phổ biến? Quyết định tôi đưa ra bây giờ sẽ ảnh hưởng đến cách tôi xây dựng phần còn lại của ứng dụng. Dựa trên nhận xét của bạn, có vẻ như Node sử dụng lỗi để kiểm soát luồng thay vì các tình huống đặc biệt. –
Xem câu trả lời của tôi bên dưới – srquinn