UnhandledPromiseRejectionWarning: Ошибка: Сетевая ошибка: apollo_cache_inmemory_1.readQueryFromStore не является функцией aws appsync nodejs - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь вызвать запрос Graphql для моего приложения AWS AppSync через nodejs.Я сталкиваюсь с ошибкой:

UnhandledPromiseRejectionWarning: Ошибка: ошибка сети: apollo_cache_inmemory_1.readQueryFromStore

Это мой код index.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config = {
AWS_ACCESS_KEY_ID: <ACCESS_KEY_ID>,
AWS_SECRET_ACCESS_KEY: <SECRET_KEY>,
HOST: '<HOST_URL>',
REGION: 'us-west-2',
PATH: '/graphql',
ENDPOINT: '<AWS_APPSYNC_ENDPOINT>',
};

config.ENDPOINT = "https://" + config.HOST + config.PATH;
exports.default = config;

global.localStorage = {
    store: {},
    getItem: function (key) {
        return this.store[key]
    },
    setItem: function (key, value) {
        this.store[key] = value
    },
    removeItem: function (key) {
        delete this.store[key]
    }
};

require('es6-promise').polyfill();
require('isomorphic-fetch');

// Require AppSync module
const AUTH_TYPE = "AWS_IAM";
const AWSAppSyncClient = require('aws-appsync').default;

const url = config.ENDPOINT;
const region = config.REGION;
const type = AUTH_TYPE.AWS_IAM;

// If you want to use API key-based auth
const apiKey = 'xxxxxxxxx';
// If you want to use a jwtToken from Amazon Cognito identity:
const jwtToken = 'xxxxxxxx';

// If you want to use AWS...
const AWS = require('aws-sdk');
AWS.config.update({
    region: config.REGION,
    credentials: new AWS.Credentials({
        accessKeyId: config.AWS_ACCESS_KEY_ID,
        secretAccessKey: config.AWS_SECRET_ACCESS_KEY
    })
});
const credentials = AWS.config.credentials;

// Import gql helper and craft a GraphQL query
const gql = require('graphql-tag');
const query = gql(`
    query {
        getSample {
            mobileNumber
        }
    }
`);

// Set up Apollo client
const client = new AWSAppSyncClient({
    url: url,
    region: region,
    auth: {
        type: type,
        credentials: credentials,
    }
});

client.hydrated().then(function a(client) {
    client.query({query: query});
    client.query({ query: query, fetchPolicy: 'network-only'}).then(function(data) {
        console.log("data: " + queryResult);
    })
});

Полная трассировка стека выглядит следующим образом:

UnhandledPromiseRejectionWarning: Ошибка: сетевая ошибка: apollo_cache_inmemory_1.readQueryFromStore не является функцией в новом ApolloError (/ Users / kanhaiagarwal / appsync1 / apps_modules / aps-node_modules / aws-aps-client / bundle.umd.js: 124: 32) в /Users/kanhaiagarwal/appsync1/node_modules/aws-appsync/node_modules/apollo-client/bundle.umd.js:1248:45 в / Users / kanhaiagarwal / appsync1node_modules / aws-appsync / node_modules / apollo-client / bundle.umd.js: 1680: 21 в Array.forEach () в /Users/kanhaiagarwal/appsync1/node_modules/aws-appsync/node_modules/apollo-client/bundleum..js: 1679: 22 в Map.forEach () в QueryManager.broadcastQueries (/Users/kanhaiagarwal/appsync1/node_modules/aws-appsync/node_modules/apollo-client/bundle.umd.js: 1672: 26) в /Users/kanhaiagarwal/appsync1/node_modules/aws-appsync/node_modules/apollo-client/bundle.umd.js:1175:35 в (узел: 23377) UnhandledPromiseRejectionWarning: необработанное отклонение обещания.Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch ().(идентификатор отклонения: 1) (узел: 23377) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели.В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js ненулевым кодом выхода.

Может кто-нибудь предложить решение для этого?

1 Ответ

0 голосов
/ 26 октября 2018

Проблема вызвана отсутствием объекта window, на который опирается пакет aws-appsync для некоторых глобальных объектов.Этого нет в среде Node.js, и добавление следующего кода в начале вашего скрипта должно заставить его работать:

global.window = global.window || {
    setTimeout: setTimeout,
    clearTimeout: clearTimeout,
    WebSocket: global.WebSocket,
    ArrayBuffer: global.ArrayBuffer,
    addEventListener: function () { },
    navigator: { onLine: true }
};

Вот проблема GitHub, где был предложен ответ:
https://github.com/awslabs/aws-mobile-appsync-sdk-js/issues/276#issuecomment-432983691

...