Администратор создаст пользователей, и при этом он будет вводить случайную строку в качестве пароля. Когда администратор редактирует существующего пользователя, ему не нужно вводить пароль, если он не хочет его менять. Если администратор не вводит пароль, будет использован старый пароль.
Поэтому я пытаюсь использовать .when()
для решения этого дела. Когда _id
существует в полезной нагрузке (что возможно только при наличии пользователя), тогда мы должны сделать поле пароля необязательным, иначе пароль требуется.
Вот моя проверка Joi
const usersJoiSchema = Joi.object({
_id: Joi.string().optional(),
firstName: Joi.string().required(),
lastName: Joi.string().required(),
email: Joi.string().required(),
password: Joi.string().when('_id', { is: Joi.exist(), then: Joi.optional(), otherwise: Joi.required() })
})
У Джои есть метод .when
на случай таких случаев. Но по какой-то странной причине это дает мне
{"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"}
как ответ api, и в консоли сервера ничего нет. Я попытался сравнить длину строки для _id
вместо exists()
, и я также пробовал
password: Joi.string().when('_id', { is: Joi.string().required(), then: Joi.string().optional(), otherwise: Joi.string().required() }),
password: Joi.string().when('_id', { is: Joi.string(), then: Joi.string().optional(), otherwise: Joi.string().required() }),
для ключа пароля, но все та же проблема.
Если у кого-то есть какие-либо идеи по этому поводу, пожалуйста, помогите мне.