如何在前端JS中获取Django-rest-auth的HTTP 400错误详情?
解决Django-rest-auth 400错误前端无法获取详情的问题
你遇到的核心问题是:fetch API不会在HTTP 4xx状态码时自动抛出错误,且Django-rest-auth返回的400错误详情是放在响应体的JSON数据里的,你需要手动解析响应体才能拿到这些信息。另外你原代码里的response.json()是异步操作,成功分支里也需要加await才能正确获取数据。
修改后的代码如下:
const registerUser = async (user ) => { console.log( JSON.stringify(user)) const response = await fetch("/api/dj-rest-auth/registration/", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(user) }); if (response.status === 201) { console.log('注册成功!') // 必须加await,因为json()是异步方法 let data = await response.json() localStorage.clear(); localStorage.setItem('authToken', data.key); } else { // 解析400响应的JSON错误数据 const errorData = await response.json(); console.log('错误详情:', errorData); // 可根据实际结构提取字段展示给用户,比如 errorData.username[0] 或 errorData.password[0] } };
关键说明:
response.json()是异步函数,无论响应状态是成功还是错误,都需要用await才能拿到实际的JSON数据。- Django-rest-auth返回的400错误通常是结构化对象,比如
{"username": ["用户名包含非法字符"], "password": ["密码不匹配"]},你可以直接访问对应字段获取具体错误信息。 - 如果遇到非JSON格式的响应(极端情况),可以在解析时添加
try-catch块做兼容处理,但Django-rest-auth的错误响应默认都是JSON格式。
内容的提问来源于stack exchange,提问作者euh
相关产品推荐
相关产品推荐

