apollo-client Ошибка сети, если поле пустое - PullRequest
0 голосов
/ 03 мая 2018

Этот конкретный код работает без проблем уже несколько месяцев, сегодня утром, без каких-либо значительных изменений, которые я могу указать в нашей настройке или в нашем коде, который я начал получать

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 сегодня вечером (время автоматического развертывание на нашем сервере разработки).

1 Ответ

0 голосов
/ 04 мая 2018

Вчера вечером я получил похожую ошибку, и я смог отследить ее до изменения пакета graphql -where с версии 4.1.8 до 4.1.9 (обновлено 2 дня назад). ).

Вот список изменений: https://github.com/apollographql/apollo-client/blob/master/packages/graphql-anywhere/CHANGELOG.md

Добавление "graphql-anywhere": "4.1.8", в мой файл package.json решило проблему для моего приложения.

...