检查REST端点中返回的JSON值

时间:2017-07-19 13:33:45

标签: javascript json fetch

我是React-native(和javascript)的新手,我正努力做到这一点。

我有一个有用户的api

https://api.example.com/users/

我想要检查api在点击端点时是否返回值

https://api.example.com/users/ {用户名}

这样的事情:

async function getUsersFromApi(userName) {
      try {
         let response = await 
         fetch('https://api.example.com/users/'+userName);
         let responseJson = await response.json();

         //if endpoint returns response
         // alert("endpoint exists")

       } catch(error) {
            console.error(error);
       }
      }

我在评论中写的部分是我正在努力的部分。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

response.ok属性将告诉您请求是否成功,这是确定资源是否存在的常用方法。如果不存在具有给定username的用户,则REST API应返回404 error,这将导致response.okfalse

const response = await fetch('https://api.example.com/users/'+userName);
const userExists = response.ok;

请注意,如果您根本不打算使用响应正文,则更适合执行HEAD请求。这指示服务器不应返回响应主体并跳过任何可能浪费的相关计算。因此,请求在时间和带宽上都更有效。

const response = await fetch('https://api.example.com/users/'+userName. {
    method : 'GET'
});
const userExists = response.ok;

编辑:回答下面的原始问题

假设你有一个users数组,你应该使用Array#some()循环遍历它,并确定其中的一个对象是否有一个与你的username匹配的用户名字段功能

const userExists = users.some((user) => {
    return user.username === username;
});
console.log(userExists); // true or false

另一方面,如果您需要返回该用户对象而不是布尔值,则应使用Array#find()代替。

const user = users.find((user) => {
    return user.username === username;
});
console.log(user); // user object or undefined

对于find(),请务必处理未找到用户并返回undefined的情况。如果您不小心,可能最终会访问undefined上的某个属性,这会引发错误。