Tengo un formulario con una entrada desplegable, por lo que las opciones para esa entrada ya están configuradas.
El problema es que el valor de la entrada, a pesar de ser correcto y está dentro de los valores aceptados del esquema, recibí el mensaje de que el Provider must be one of [[object Set], [object Set]] .
Lo más extraño es que este problema está ocurriendo en producción, pero en localhost no obtengo este error de validación.
clave de provider del schema :
provider: Joi.string().required().label('Provider').when('entitlementType', { is: 'Offer', then: Joi.string().valid(...providersForSubscriptions), otherwise: Joi.string().valid(...providersForProducts), }), matriz providersForSubscriptions suscripciones:
[ "RBL", ] matriz providersForProducts productos:
[ "RBL", "content-store", "zencore", "VIP" ] Como puede ver, es una validación bastante simple, recibirá algún valor del provider y aceptará el valor si está dentro de las matrices valid .
Registro del formulario en el navegador.
console.log(entitlementType, provider, providersForProducts);
Y esta es la salida:
Entonces, ¿qué está pasando? Si verificamos el context de la advertencia de validación, el valor de entrada es zencore y zencore se considera un valor válido.
¿Alguna idea? ¿Debería intentar refactorizar el esquema? ¿Por qué esto es solo prod?
De su esquema:
provider: Joi.string().required().label('Provider').when('entitlementType', { is: 'Offer', then: Joi.string().valid(...providersForSubscriptions), otherwise: Joi.string().valid(...providersForProducts), }), Y su salida, podemos ver que entitlementType NO es una oferta. Entonces eso significa
Joi.string().valid(...providersForProducts),se está utilizando para la validación en este campo en particular.
También podemos ver que el Provider must be one of [[object Set], [object Set]] lo que significa que Joi está comprobando una serie de conjuntos.
Eso nos señala a providersForProducts como el culpable.
¿Por qué es una matriz de conjuntos? Quién sabe. Registre ese valor para confirmar y luego regrese para ver por qué está configurado como tal.