Можно ли настроить ошибки в мангусте? - PullRequest
0 голосов
/ 06 мая 2018

Допустим, у меня есть схема:

const transactionSchema = new mongoose.Schema({
    "ID": {
        type:String,
        required:true,
        maxlength:36,
        minlength:35,
    }
...
}

И если мой клиент попытается сохранить документ с идентификатором длиной менее 34, mongoose выдаст эту ошибку

{
  "errors": {
    "ID": {
      "message": "Path `ID` (`k2131381a2asaddaddsdsw12sa3`) is shorter than the minimum allowed length (35).",
      "name": "ValidatorError",
      "properties": {
        "minlength": 35,
        "type": "minlength",
        "message": "Path `{PATH}` (`{VALUE}`) is shorter than the minimum allowed length (35).",
        "path": "ID",
        "value": "k2131381a2asaddaddsdsw12sa3"
      },
      "kind": "minlength",
      "path": "ID",
      "value": "k2131381a2asaddaddsdsw12sa3",
      "$isValidatorError": true
    }
  },
  "_message": "transaction validation failed",
  "message": "transaction validation failed: ID: Path `ID` (`k2131381a2asaddaddsdsw12sa3`) is shorter than the minimum allowed length (35).",
  "name": "ValidationError"
}

Теперь, чтобы сообщить моему клиенту точную причину ошибки (т. Е. Идентификатор короче, чем ожидалось), мне нужно проделать большую тяжелую работу и написать различные операторы if else, как это:

if(error && error.ID && error.ID.kind === 'minlength'){
   res.status(400).json({error:45});//error 45 refers to ID length errors. Client knows about it
}

Я делаю это неправильно? Есть ли чистый способ сказать мангусте просто дать мне ошибку с кодом 45, когда длина ID не подходит?

1 Ответ

0 голосов
/ 06 мая 2018

Вы можете использовать validate объект в определении Schema.

В объекте message в validate вы можете указать любое сообщение на ваш выбор

const transactionSchema = new mongoose.Schema({
    "ID": {
        type:String,
        required:true,
        validate : {
            validator : (data)=>{
                if(data.length >=35 && data.length <=36 ){
                    return true; //validation success
                }
                else{
                    return false; // validation failure
                }
            },
            message : "Length mismatch. Length must be >=35 and <=36"
        }
    }
...
}

Предположим, что вам нужно вставить запись в эту схему, вы можете использовать метод validateSync() для запуска проверки, указанной в схеме, перед выполнением операции insert.

var transaction = new transaction({ID : "myid"});
var validationResult = transaction.validateSync();
if(validationResult == null){
    //validation success
    //proceed with insert operation
}
else{
    //validation failure
    //you can extract all the key fields that failed the validation using errors object in validationResult object

    for (x in validationResult.errors) {
        // print error messages of specific field
        console.log(validationResult.errors[x].message);
    }
}

Вы можете напечатать объект validationResult, чтобы увидеть, что имеет объект validationResult.

Самым полезным для нас будет объект validationResult.errors, как показано в приведенном выше коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...