J'ai un point de terminaison d'enregistrement simple que je souhaite permettre aux utilisateurs de s'inscrire dans mon application vue, je souhaite également afficher les erreurs appropriées au client vue depuis mon backend.
La structure JSON de l'erreur ressemble à ceci :
{ "errors": { "Password": [ "Password is required", "Minimum length of 8 characters is required" ], "UserName": [ "Username is required", "Minimum length of 6 characters is required" ], "EmailAddress": [ "Email Address is required", "Invalid Email Address" ], "ConfirmPassword": [ "Confirm Password is required" ] } }
J'ai un composable avec une fonction de registre comme celle-ci :
export default function useAuth() { let errors = ref({}) const register = (request) => { errors = {} AuthService.register(request) .then(res => { console.log("res: "+ res) }) .catch(err => { const errList = err.response.data.errors; errors = errList // Here i'm getting a reponse console.log(errors) }) } return { register, errors } }
J'ai également un composant de formulaire qui n'est qu'un simple formulaire avec des modèles en V ajoutés :
<script> // Imports.. export default { components: {}, setup() { const { register, errors} = useAuth(); const request = { userName: "", emailAddress: "", password: "", confirmPassword: "", }; const handleSubmit = () => { register(request); // empty object console.log(errors) }; return { errors, request, handleSubmit }; }, }; </script>
Dans mon composable, je peux déconnecter la réponse d'erreur comme ceci
Réponse d'erreur
J'ai essayé de désenregistrer l'erreur dans le composant formulaire mais maintenant j'obtiens juste un objet vide (j'utilise réactif pour gérer cet objet d'erreur dans le composable)
Réponse d'objet vide à partir d'éléments composables
On dirait que vous renvoyez un tableau, pas un objet.
Donc, pour y accéder, vous devez faire
errors[0].Password
.Allez-vous utiliser un objet ou un tableau (cela peut être utile si vous avez plusieurs erreurs) ?
Si le tableau est attendu et que vous devez vérifier l'attribut
Password
pour toutes les erreurs, vous feriez quelque chose comme ceci :Réfléchissez à votre code
Il contient plusieurs erreurs, ce qui rend difficile pour moi de fournir une réponse concise qui corresponde à vos besoins. Au lieu de cela, j'ai rapidement créé un extrait de code qui fonctionne selon vos principes. À l’avenir, j’essaierai de mettre en évidence les points à surveiller et de fournir de bons conseils pour l’avenir.
- Réponse en utilisant
async function()
可以等待Promise
Pas bon (actuellement
console.log
证明使用async
si vous souhaitez utiliser les résultats immédiatement)Cela ne fournit pas de résultats immédiats ; l'exécution sur un thread séparé prend un certain temps. En conséquence, le script JavaScript avance presque immédiatement. Normalement, cela entraînera une erreur si vous souhaitez utiliser le résultat immédiatement car la réponse n'est pas encore arrivée.
Donc, lorsque vous essayez d'accéder à
errors
的新结果时,您会看到它是空的,即使在console.log
之后,1-2 秒后,它不会再为空,因为register()
, cela a déjà été exécuté.D'accord
等待
- Attendez la fin du processus - Documentation MDN异步函数
- 需要什么await
Utilisation de - Documentation MDN- Comment utiliser
ref()
avec VueJS ?1.
Stockez les valeurs enregistrées par
ref()
、reactive()
、compulated()
,reactive()
,compulated()
, etc. dans des variables non modifiables. Utilisez toujours const lors de la déclaration de ces variables.Plus d'informations - Réponses StackOverflow
Pas bien
D'accord
2.
Vous utilisez le suffixe
.value
dans une instance et pas dans une autre. Eh bien, ce qui se passe, c'est que le résultat d'une variable.value
后缀,而在另一实例中则不使用。嗯,情况是ref()
变量的结果始终存储在.value
est toujours stocké dans.value
. Vous pouvez le manipuler en conséquence.Pas bien
D'accord
Comment utiliser
ref()
? - Documentation VueJSExemple de code avec logique décrite
J'ai commenté ces lignes pour mieux comprendre le code. J'espère que cela est compréhensible.