Pada titik ini tampaknya logis untuk memahami bagaimana luwak menangani kesalahan.
Anda tidak ingin model Anda menangani pesan kesalahan. Lapisan presentasi (pengontrol?) harus bergantung pada type
untuk memutuskan pesan ramah pengguna mana yang terbaik untuk ditampilkan (dipertimbangkan).
Ada juga kasus di mana validasi dapat terjadi dengan menggunakan middleware. Dalam hal ini, pesan kesalahan yang akan muncul ke pengontrol Anda adalah apa pun yang Anda teruskan ke next()
panggilan balik.
Jadi, untuk kasus middleware, meskipun tidak didokumentasikan, untuk menjaga API validasi yang konsisten di seluruh model Anda, Anda harus langsung menggunakan konstruktor Kesalahan Mongoose:
var mongoose = require('mongoose');
var ValidationError = mongoose.Error.ValidationError;
var ValidatorError = mongoose.Error.ValidatorError;
schema.pre('save', function (next) {
if (/someregex/i.test(this.email)) {
var error = new ValidationError(this);
error.errors.email = new ValidatorError('email', 'Email is not valid', 'notvalid', this.email);
return next(error);
}
next();
});
Dengan begitu, Anda dijamin akan menangani kesalahan validasi secara konsisten meskipun kesalahan validasi berasal dari middleware.
Untuk mencocokkan pesan kesalahan dengan jenis dengan benar, saya akan membuat enum yang akan bertindak sebagai peta statis untuk semua jenis yang mungkin:
// my controller.js
var ValidationErrors = {
REQUIRED: 'required',
NOTVALID: 'notvalid',
/* ... */
};
app.post('/register', function(req, res){
var user = new userModel.Model(req.body);
user.save(function(err){
if (err) {
var errMessage = '';
// go through all the errors...
for (var errName in err.errors) {
switch(err.errors[errName].type) {
case ValidationErrors.REQUIRED:
errMessage = i18n('Field is required');
break;
case ValidationErrors.NOTVALID:
errMessage = i18n('Field is not valid');
break;
}
}
res.send(errMessage);
}
});
});