В моем приложении 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"
}