Ich habe einen einfachen Registrierungsendpunkt, den ich Benutzern ermöglichen möchte, sich in meiner Vue-App zu registrieren. Außerdem möchte ich dem Vue-Client von meinem Backend aus entsprechende Fehler anzeigen.
Die Fehler-JSON-Struktur sieht folgendermaßen aus:
{ "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" ] } }
Ich habe ein Composable mit einer Registerfunktion wie dieser:
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 } }
Ich habe auch eine Formularkomponente, die nur ein einfaches Formular mit hinzugefügten V-Modellen ist:
<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>
In meinem Composable kann ich die Fehlerantwort so abmelden
Fehlerantwort
Ich habe versucht, die Registrierung des Fehlers in der Formularkomponente aufzuheben, aber jetzt erhalte ich nur ein leeres Objekt (ich verwende reaktiv, um dieses Fehlerobjekt im Composable zu behandeln)
Leere Objektantwort von zusammensetzbaren Elementen
看起来你正在返回一个数组,而不是一个对象。
因此,要获得访问权限,您需要执行
errors[0].Password
。您打算使用对象还是数组(如果您有多个错误,可能会很有用)?
如果该数组是预期的,并且您需要检查
Password
属性的所有错误,您将执行如下操作:反思你的代码
其中存在多个错误,使我很难提供适合您需求的简洁答案。相反,我快速整理了一个根据您的原则工作的代码片段。展望未来,我将尽力强调需要注意的事项,并为未来提供一些好的建议。
- 使用
的响应async function()
可以等待Promise
不好(如果您想立即使用结果,目前
console.log
证明使用async
)这并不能立即提供结果;它需要一些时间在单独的线程上运行。结果,JavaScript 脚本几乎立即向前移动。通常,如果您想立即使用结果,这将导致错误,因为响应尚未到达。
因此,当您尝试访问
errors
的新结果时,您会看到它是空的,即使在console.log
之后,1-2 秒后,它不会再为空,因为register()
已经执行完毕。好的
等待
-等待进程结束 - MDN 文档异步函数
- 需要什么await
使用 - MDN 文档- 如何在 VueJS 上使用
ref()
?1.
将
ref()
、reactive()
、compulated()
等保存的值存储在无法修改的变量中。声明这些变量时始终使用 const。更多信息 - StackOverflow 答案
不好
好的
2.
您在一个实例中使用
.value
后缀,而在另一实例中则不使用。嗯,情况是ref()
变量的结果始终存储在.value
中。您可以相应地操纵它。不好
好的
如何使用
ref()
? - VueJS 文档具有概述逻辑的示例代码
我对这些行进行了注释,以便更好地理解代码。我希望这是可以理解的。