Raj*_*ary 2 graphql apollo-server
我不断收到“无法为不可为空的字段Airline.id返回null”。当FlightSchedule.operatingAirline为null(根据架构完全有效)并且客户端查询FlightSchedule.operatingAirline.id时发生错误。如何解决这个问题?将Airline.id,Airline.code和Airline.name设置为可为空可解决此问题,但这不是解决此问题的正确方法,因为如果存在Airline,这3个字段也将始终存在。以下是我的架构:
type Airline {
id: String!,
code: String!,
name: String!
}
type FlightSchedule {
airline: Airline!
operatingAirline: Airline
}
Run Code Online (Sandbox Code Playgroud)
以下是我的查询:
getFlightSchedules {
airline
{
id
code
name
}
operatingAirline
{
id
code
name
}
}
Run Code Online (Sandbox Code Playgroud)
解决该错误时,该字段将解析为null。其中包括您遇到的验证错误。从规格:
如果在ExecuteSelectionSet()期间,具有非null fieldType的字段引发字段错误,则该错误必须传播到整个选择集,如果允许则解析为null或进一步传播到父字段。
如果发生这种情况,可以取消尚未执行或尚未产生值的任何同级字段,以避免不必要的工作。
换句话说,如果父字段具有特定的对象类型,并且该类型的字段具有不可为空的字段,并且该字段解析为null,则该父字段也将解析为null。父字段不能返回无效的对象(在这种情况下,因为它有一个非null字段返回null),所以它唯一可以做的就是返回null。当然,如果父字段本身不为null,则此行为将沿树传播,直到最终遇到可为空的字段。
那么,为什么会出现该错误?因为你的解析器的operatingAirline
是不返回null。它返回某种对象(不完整的航空公司对象,数组,字符串或其他东西),然后GraphQL有效地尝试将其强制转换为该Airline
类型。请求了id字段,但是它根据operatingAirline
的resolver 返回的对象解析为null 。由于id
请求并返回null,因此整个operatingAirline
字段均无法通过验证,并返回null。
归档时间: |
|
查看次数: |
1899 次 |
最近记录: |