Этот конкретный код работает без проблем уже несколько месяцев, сегодня утром, без каких-либо значительных изменений, которые я могу указать в нашей настройке или в нашем коде, который я начал получать
ERROR Error: Uncaught (in promise): Error: Network error: Cannot convert undefined or null to object Error: Network error: Cannot convert undefined or null to object
at new ApolloError (ApolloError.js:43)
at eval (QueryManager.js:324)
at eval (QueryManager.js:755)
at Array.forEach (<anonymous>)
at eval (QueryManager.js:754)
at Map.forEach (<anonymous>)
at QueryManager.broadcastQueries (QueryManager.js:749)
at eval (QueryManager.js:251)
at ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (core.js:4733)
at new ApolloError (ApolloError.js:43)
at eval (QueryManager.js:324)
at eval (QueryManager.js:755)
at Array.forEach (<anonymous>)
...
inline.bundle.js:26 (anonymous) @ main.bundle.js:1
Это происходит из-за ошибки в Object.keys (src) .forEach:
var hasOwn = Object.prototype.hasOwnProperty;
export function merge(dest, src) {
Object.keys(src).forEach(function (key) {
var srcVal = src[key];
if (!hasOwn.call(dest, key)) {
dest[key] = srcVal;
}
else if (srcVal && typeof srcVal === 'object') {
merge(dest[key], srcVal);
}
});
}
Ошибка:
"Cannot convert undefined or null to object"
слияние вызывается отсюда:
function executeSelectionSet(selectionSet, rootValue, execContext) {
var fragmentMap = execContext.fragmentMap, contextValue = execContext.contextValue, variables = execContext.variableValues;
var result = {};
selectionSet.selections.forEach(function (selection) {
if (!shouldInclude(selection, variables)) {
// Skip this entirely
return;
}
if (isField(selection)) {
var fieldResult = executeField(selection, rootValue, execContext);
var resultFieldKey = resultKeyNameFromField(selection);
if (fieldResult !== undefined) {
if (result[resultFieldKey] === undefined) {
result[resultFieldKey] = fieldResult;
}
else {
merge(result[resultFieldKey], fieldResult);
}
}
}
else {
var fragment = void 0;
if (isInlineFragment(selection)) {
fragment = selection;
}
else {
// This is a named fragment
fragment = fragmentMap[selection.name.value];
if (!fragment) {
throw new Error("No fragment named " + selection.name.value);
}
}
var typeCondition = fragment.typeCondition.name.value;
if (execContext.fragmentMatcher(rootValue, typeCondition, contextValue)) {
var fragmentResult = executeSelectionSet(fragment.selectionSet, rootValue, execContext);
merge(result, fragmentResult);
}
}
});
if (execContext.resultMapper) {
return execContext.resultMapper(result, rootValue);
}
return result;
}
После того, как я определил поле, которое было проанализировано, и тот факт, что оно было нулевым значением в бэкэнде, я попытался изменить значение, а затем ошибка переместилась в следующее поле с нулевым значением для того же узла. Я пытался также с другими запросами, и мы получили тот же результат.
Мы используем django и графен на бэкэнде и apollo-client на фронтэнде.
Я был бы признателен за любую информацию здесь, я все еще пытаюсь понять, что изменилось между 23:00 вчера (последний раз, когда я тестировал код, который сейчас бомбит, и все это работало) и 1:00 сегодня вечером (время автоматического развертывание на нашем сервере разработки).