【问题标题】:Getting an empty array on Axios GET request在 Axios GET 请求上获取一个空数组
【发布时间】:2020-10-14 01:15:17
【问题描述】:

我正在尝试使用 Axios 进行 GET 请求。 API 的响应包括几个正确填充的对象。但是,一个特定的对象/字段是一个始终显示为空数组的数组。

这是我得到的响应(注意带有空数组的“用户”对象):

{
  url: 'https:/<removed>/customers/<removed>/users?number=41442268000',
  users: [],
  customer: {
    url: 'https://<removed>/customers/<removed>',
    id: '<removed>',
    name: 'CX Customer1'
  },
  paging: { offset: 0, limit: 2000, count: 0 }
}

奇怪的是,当我使用 Postman 查询完全相同的资源时,它工作得非常好:

{
    "url": "https://<removed>/customers/<removed>/users?number=8013334001",
    "users": [
        {
            "url": "https://<removed>/customers/<removed>/users/<removed>",
            "id": "b1703d6a<removed>",
            "bwId": "<removed>.webex.com",
            "lastName": "One",
            "firstName": "Gus1",
            "displayName": "Gus1 One",
            "type": "USER",
            "callerIdLastName": "One",
            "callerIdFirstName": "Gus1",
            "callerIdNumber": "+1-8013334001",
            "numbers": [
                {
                    "external": "+1-8013334001",
                    "extension": "4001",
                    "primary": true
                }
            ],
            "location": {
                "name": "Salt Lake City",
                "id": "9a03e3e<removed>",
                "url": "https://<removed>/customers/<removed>/locations/<removed>"
            }
        }
    ],
    "customer": {
        "url": "https://<removed>/customers/<removed>",
        "id": "4c1ccbe<removed>",
        "name": "CX Customer1"
    },
    "paging": {
        "offset": 0,
        "limit": 2000,
        "count": 1
    }
}

正如上面 Postman 响应中所观察到的,“users”数组内部有一个对象。

这是我的 Node.js 代码:

function getUsersByTN(customerInfo, userData) {
    let rowNumber = 1;
    let successCount = 0;
    let failureCount = 0;
    axios.defaults.headers.common["Authorization"] = `Bearer ${customerInfo.token}`;
    console.log('Attempting to find users on Webex Calling using their phone number...');
    return new Promise(async (resolve, reject) => {
        try {
            for (let data of userData) {
                rowNumber++;
                const phoneNumber = data.TN;
                const getUserURL = `https://<removed>/customers/` +
                                    `${customerInfo.customerId}/` +
                                    `users?number=` +
                                    `${phoneNumber}`;

                const result = await axios.get(getUserURL);
                console.log(result.data);
                resolve(result);
            }
        }
        catch (err) {
            reject(new Error(err));
        }
    })
  }

我也尝试过用更传统的 Promise 使用方式替换 async/await 格式,但得到了相同的结果:

axios.get(getUserURL)
 .then(result => console.log(result.data))
 .catch(err => console.log(err));

我错过了什么?

谢谢!

-格斯

【问题讨论】:

  • 试试console.log(result.data.users)console.log(result.data.users.length)
  • 尝试将内容类型添加为 json 并在 postman 中生成代码 sn-ps 并进行比较。
  • console.log(result.data.users) 显示 [ ]。执行console.log(result.data.users.length) 显示0。谢谢。
  • 据我所知,Postman 的代码与我的非常相似。它使用console.log(JSON.stringify(response.data))来显示数据,我也已经尝试过了。

标签: node.js arrays axios


【解决方案1】:

我发现了问题。我的输入 CSV 文件中有电话号码不存在的用户。一旦我用有效/现有的电话号码更新它,它就会按预期工作。

让我失望的是,当我提供无效的电话号码时,API 仍然回复“200 OK”。我期待无效数字出现“404 未找到”,所以我什至没有考虑检查数字。

我的第一个想法是这是 API 上的一个错误。换句话说,我最初认为 API 应该回复“404 not found”。但是,当我对此进行更多思考时,我意识到带有空结果的“200 OK”是更合适的响应。这是因为“404”会错误地指示找不到 API 资源,这意味着请求被发送到了无效的 URL。这显然不是我们想要的。相反,我们想让应用知道它到达了一个有效的 API 资源,但没有找到符合提供的搜索条件的结果。

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 2018-03-29
    • 2021-02-12
    • 1970-01-01
    • 2019-07-27
    • 2020-02-05
    • 2021-02-03
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多