GraphQL 是一种灵活的数据查询语言,让开发人员可以精确地定义他们所需要的数据,并避免了过度获取数据、网络传输效率低等问题。但是在查询时,如果所请求的数据不存在,那么 GraphQL 会返回 null 值。本文将介绍在 GraphQL 中如何处理 null 值,以及如何减少 null 值的出现。
处理 null 值
在 GraphQL 中,如果查询所请求的数据不存在,则会返回 null 值。因此,在代码中必须考虑 null 值的可能性,以避免代码崩溃或产生不必要的错误。
查询中的 null 值
在 GraphQL 查询中,可以使用可选链式语法(optional chaining)来处理 null 值。可选链式语法会在属性或方法中使用问号,如果该属性或方法返回 null 值,则返回 undefined,而不是引发错误。
例如,以下 GraphQL 查询会返回一个名为 "person" 的对象,如果这个对象中不包含 "name" 属性,则会返回 null 值:
query { person(id: "123") { name email } }
为了避免 null 值的出现,可以使用可选链式语法:
query { person(id: "123") { name? email } }
如果 "person" 对象中没有 "name" 属性,该查询不会失败,而是直接返回 undefined,避免了不必要的错误。
解析器中的 null 值
在 GraphQL 中,查询结果的解析器也需要考虑到 null 值的可能性。
例如,假设以下查询中的 "Person" 类型包含一个 "friends" 属性,该属性返回一个包含 "Person" 对象的数组。如果 "friends" 属性返回 null 值,则会导致解析器出现错误:
query { person(id: "123") { name friends { name } } }
为了避免 null 值引起的错误,可以在解析器中进行判断:
-- -------------------- ---- ------- - ------- - -------- -------- -- - -- ---------------- - ------ --------------- - ---- - ------ --- - - - -
如果 "friends" 属性为 null 值,则该解析函数会将其替换为一个空数组,避免了错误的发生。
减少 null 值的出现
在 GraphQL 中,为了提高性能并减少 null 值的出现,需要在请求中指定所需的字段。如果请求的字段包含 null 值,则在响应中返回整个对象非常浪费。
例如,以下 GraphQL 查询请求了一个 "person" 对象以及其 "name" 和 "email" 属性:
query { person(id: "123") { name email } }
如果查询中返回的 "person" 对象包含许多其它属性,但没有 "name" 或 "email" 属性,则会返回一些不必要的 null 值。如果请求中只包含所需的字段,则可以减少 null 值的出现:
query { person(id: "123") { name email } }
结论
了解 GraphQL 如何处理 null 值是成为一名优秀开发人员的必备技能。在查询和解析器中处理 null 值,可以避免代码崩溃或产生不必要的错误。通过减少 null 值的出现,可以提高性能并减少响应数据的大小。
希望本文对你学习 GraphQL 有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671627ddad1e889fe21b1b05