JOI показать все ошибки формы - PullRequest
0 голосов
/ 11 июня 2019

В моем приложении node / express у меня есть следующий код.

import Joi from 'joi';
import { Schema, model } from 'mongoose';

const userSchema = new Schema(
  {
    firstName: {
      type: String,
      required: true,
      minlength: 2,
      maxlength: 30,
    },
    lastName: {
      type: String,
      required: true,
      minlength: 2,
      maxlength: 30,
    },
    email: {
      type: String,
      required: true,
      minlength: 5,
      maxlength: 100,
      unique: true,
      lowercase: true
    },
    password: {
      type: String,
      required: true,
      minlength: 8,
      maxlength: 1024,
    },
    avatar: {
      type: String
    },
  }, 
);

export const User = model('User', userSchema);

/** Validate user */
export function validateUser(user) {
  const schema = {
    firstName: Joi.string().min(2).max(30).required(),
    lastName: Joi.string().min(2).max(30).required(),
    email: Joi.string().min(5).max(100).required().email(),
    password: Joi.string().min(8).max(1024).required(),
    confirmPassword: Joi.any().valid(Joi.ref('password')).required().options({ language: { any: { allowOnly: 'Passwords do not match' } } }),
    avatar: Joi.string(),
  }; 

  return Joi.validate(user, schema, { abortEarly: false });
}

Я использую abortEarly как false.После проверки ответ будет таким:

[
    {
        "message": "\"firstName\" is required",
        "path": [
            "firstName"
        ],
        "type": "any.required",
        "context": {
            "key": "firstName",
            "label": "firstName"
        }
    },
    {
        "message": "\"lastName\" is required",
        "path": [
            "lastName"
        ],
        "type": "any.required",
        "context": {
            "key": "lastName",
            "label": "lastName"
        }
    },
    {
        "message": "\"email\" is required",
        "path": [
            "email"
        ],
        "type": "any.required",
        "context": {
            "key": "email",
            "label": "email"
        }
    },
    {
        "message": "\"password\" is required",
        "path": [
            "password"
        ],
        "type": "any.required",
        "context": {
            "key": "password",
            "label": "password"
        }
    },
    {
        "message": "\"confirmPassword\" is required",
        "path": [
            "confirmPassword"
        ],
        "type": "any.required",
        "context": {
            "key": "confirmPassword",
            "label": "confirmPassword"
        }
    }
]

Я хочу, чтобы массив ошибок содержал только сообщения об ошибках.Но это связано с дополнительными вещами, такими как, путь, тип, контекст и т. Д. Как я могу получить более чистый ответ, как этот?

{
 "firstName": "First name is required",
"lastName": "Last name is required",
"email": "Email must be a valid email"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...