sql >> Databáze >  >> NoSQL >> MongoDB

Řešení chyb ověření Mongoose – kde a jak?

V tomto bodě se zdá logické přistoupit k tomu, jak mongoose zachází s chybami.

Nechtěli byste, aby vaše modely zpracovávaly chybové zprávy. Prezentační vrstva (řadiče?) by se měla spoléhat na type rozhodnout, která zpráva je nejvhodnější pro zobrazení (zvažuje se i18n).

Existuje také případ, kdy k ověření může dojít pomocí middlewaru. V tomto případě chybová zpráva, která se objeví na vašem ovladači, je to, co předáte do next() zpětné volání.

Takže v případě middlewaru, i když to není zdokumentováno, abyste zachovali konzistentní ověřovací API napříč vašimi modely, měli byste přímo použít konstruktory chyb 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();
});

Tímto způsobem máte zaručeno konzistentní zpracování chyb ověření, i když chyba ověření pochází z middlewaru.

Abychom správně přiřadili chybové zprávy k typům, vytvořil bych výčet která by fungovala jako statická mapa pro všechny možné typy:

// 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);

    }
  });
});


  1. Mongoose rozdíl mezi .save() a použitím update()

  2. Hibernujte s MongoDB

  3. Chybová zpráva:MongoError:bad auth Ověření se nezdařilo prostřednictvím řetězce URI

  4. Správné skrytí přihlašovacích údajů k databázi