J'utilise Joi pour valider une charge utile d'un service dans mon serveur node.js en utilisant le framework hapijs. Il sert à ressembler à ceci (dans mon code dactylographiée ainsi qu'après la compilation de javascript):Définir la valeur par défaut de la validation
payload: {
para1: Joi.number().required(),
para2: Joi.string()
}
Maintenant, je veux définir la valeur par défaut des deux paramètres. Si le code est écrit en javascript, je peux le faire:
payload: {
para1: Joi.number().required().default(1),
para2: Joi.string().default("defaultstring")
}
Je l'ai testé dans fanfaronnades et les valeurs par défaut est devenu en fait les valeurs que je jeu.
Cependant, mon projet est écrit en tapuscrit. J'ai fait la même chose et compilé le code de type. Le résultat javascript ressemble à ceci:
payload: {
para1: Joi.number().required()["default"](1),
para2: Joi.string()["default"]("defaultstring")
}
En swagger, les valeurs par défaut ne sont pas appliquées.
Voici mes questions:
- pourquoi le code devient différent après la compilation? Qu'est-ce que
["default"]("defaultstring")
signifie et que fait-il? - comment puis-je écrire un code tapuscrit pour vous assurer qu'il peut compilé comme
Joi.string().default("defaultstring")
Mise à jour
Selon le poste @ RÉR, le format en question 2 est tout simplement différente façon d'accéder à la propriété de l'objet. Je reçois également la référence de here. Mais cela n'explique pas s'ils ont une différence quelconque. Est-ce que quelqu'un a une idée?
Update2
Here est la différence entre les deux façons accès à la propriété JS. Il semble qu'il n'y ait pas d'effet négatif en utilisant des parenthèses. Cependant, dans mon cas, les valeurs par défaut ne sont pas reflétées sur swagger. Je ferai des recherches à ce sujet.
Enfin compris. Lorsque j'utilise un script de type, les notes de swagger sont générées à partir de la fonction initiale de la frappe, et non du fichier JS. Il n'y a pas de problème avec le code lui-même. – zhangjinzhou