Администратор создаст пользователей, и при этом он введет некоторую случайную строку в качестве пароля. Когда администратор редактирует существующего пользователя, ему не нужно вводить пароль, если он не хочет его менять. Если администратор не вводит пароль, будет использован старый пароль.
Так что я пытаюсь использовать .when()
для обработки этого случая. Когда _id
существует в полезной нагрузке (что возможно только при наличии пользователя) , тогда мы должны сделать поле пароля необязательным, иначе требуется пароль.
Вот моя проверка Джой
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() }),
для пароля, но все та же проблема.
Если у кого-то есть идеи по этому вопросу, пожалуйста, помогите мне.