首页 > 解决方案 > API 的响应未定义

问题描述

因此,我正在尝试使用令牌制作身份验证系统。这通过发送一个带有令牌的 get 请求来工作,并且 API 应该返回信息。我遇到了一个错误,TypeError: Cannot read property 'Error' of undefined错误指向这条线if (UserData.Error == "Token not valid") {return false}。所以我猜这意味着 API 的响应没有被放入UserData. API 工作正常,如果令牌正确,则返回如下:

{
    "username": "admin",
    "is_staff": true,
    "email": "admin@gmail.com"
}

这是令牌不正确时的响应

{
    "Error": "Token not valid"
}

这是我的代码:

function isAuthenticated() {
    const authtoken = localStorage.getItem('AuthToken')
    if (authtoken == null) {
        return false
    } else {
        let UserData;
        axios.get(`http://localhost:8000/api/token/?token=${authtoken}`).then(function(request) {
            UserData = request.data
        })
        if (UserData.Error == "Token not valid") {return false}
        else {return UserData}
    }
}

标签: javascriptreactjsaxios

解决方案


由于 ajax 请求将在 js 中以异步方式工作,我们可以将调用与async await.

async function isAuthenticated() {
    const authtoken = localStorage.getItem('AuthToken')
    if (authtoken == null) {
        return false
    } else {
        let UserData;
        UserData = await axios.get(`http://localhost:8000/api/token/?token=${authtoken}`).then(function(request) {
          return request.data
        })
        if (UserData.Error == "Token not valid") {return false}
        else {return UserData}
    }
}

# while executing use await
userData = await isAuthenticated()

推荐阅读