Tôi thường sử dụng chức năng trợ giúp cho những thứ như vậy. Chỉ cần chế giễu cái này lên một chút tổng quát hơn cái mà tôi sử dụng. Anh chàng này sẽ nhận tất cả các trình xác nhận "mặc định" (yêu cầu, tối thiểu, tối đa, v.v.) và làm cho thông điệp của họ đẹp hơn một chút (theo đối tượng messages
bên dưới), và chỉ trích xuất thông báo mà bạn đã thông qua trong trình duyệt tính hợp lệ của bạn xác thực.
function errorHelper(err, cb) {
//If it isn't a mongoose-validation error, just throw it.
if (err.name !== 'ValidationError') return cb(err);
var messages = {
'required': "%s is required.",
'min': "%s below minimum.",
'max': "%s above maximum.",
'enum': "%s not an allowed value."
};
//A validationerror can contain more than one error.
var errors = [];
//Loop over the errors object of the Validation Error
Object.keys(err.errors).forEach(function (field) {
var eObj = err.errors[field];
//If we don't have a message for `type`, just push the error through
if (!messages.hasOwnProperty(eObj.type)) errors.push(eObj.type);
//Otherwise, use util.format to format the message, and passing the path
else errors.push(require('util').format(messages[eObj.type], eObj.path));
});
return cb(errors);
}
Và nó có thể được sử dụng như thế này (thể hiện ví dụ router):
function (req, res, next) {
//generate `user` here
user.save(function (err) {
//If we have an error, call the helper, return, and pass it `next`
//to pass the "user-friendly" errors to
if (err) return errorHelper(err, next);
}
}
Trước:
{ message: 'Validation failed',
name: 'ValidationError',
errors:
{ username:
{ message: 'Validator "required" failed for path username',
name: 'ValidatorError',
path: 'username',
type: 'required' },
state:
{ message: 'Validator "enum" failed for path state',
name: 'ValidatorError',
path: 'state',
type: 'enum' },
email:
{ message: 'Validator "custom validator here" failed for path email',
name: 'ValidatorError',
path: 'email',
type: 'custom validator here' },
age:
{ message: 'Validator "min" failed for path age',
name: 'ValidatorError',
path: 'age',
type: 'min' } } }
Sau:
[ 'username is required.',
'state not an allowed value.',
'custom validator here',
'age below minimum.' ]
Sửa: Snap, chỉ nhận ra đây là một câu hỏi CoffeeScript. Không phải là một anh chàng CoffeeScript, tôi sẽ không thực sự muốn viết lại điều này trong CS. Bạn luôn có thể yêu cầu nó dưới dạng tệp js
vào CS của bạn?
Cũng ấy bày tỏ-validator mà hoạt động tốt. – chovy