2017-12-22 179 views
11

Używam zdalnego szewowania schematu na moim serwerze pośredniczącym. Mogę zdalnie uzyskać schemat na serwerze oprogramowania pośredniego, zdefiniowałem moją trasę w ten sposób na serwerze oprogramowania pośredniego.Jak przekazać rozszerzenie z jednego serwera do serwera oprogramowania pośredniego

app.use('/graphql', graphqlHTTP((request,res) => { 
const startTime = Date.now(); 
return { 
    schema: remoteSchema 
    graphiql: false, 
    extensions({ document, variables, operationName, result }) { 
    return { 
     // here I am not getting extensions which I have on my another server as below. 
     console.log(res); // this does not have additional info and response headers 
     console.log(result); // this only has response against the query 
    } 
    }; 
})); 

otrzymuję wynik zapytania w wyniku ale nie dostaję nagłówki odpowiedzi i informacje dodatkowe, które jest częścią rozszerzenia, które dodaję na innym moim serwerze gdzie przeliczniki istnieją.

{ 
    "data": { 
     "records": { 
      "record": [{ 
        "id": 1, 
       }, 
       { 
        "id": 2, 
       } 
      ], 
     }, 
     "additionalInfo": {} 
    }, 
    "extensions": { 
     "info": {} 
    } 
} 

Co może być problemem? W ten sposób dodaję nagłówki odpowiedzi i dodatkowe informacje na moim innym serwerze w rozszerzeniach. Debuguję poniżej kodu, w którym dostępne są dane rozszerzeń. To nie jest przekazywane do serwera oprogramowania pośredniego.

extensions({ document, variables, operationName, result }) { 
    result.data.additionalInfo = res.additionalInfo; 
    // extension to write api headers in response 
    var headerObj = {}; 
    res.apiHeaders.forEach(element => { 
    merge(headerObj, element); 
    }); 
    result.headerObj = headerObj; 
    return { 
     information: headerObj 
    }; 
} 

Mój przepływ aplikacji polega na tym, że nazywam trasę pośrednią, a następnie inną trasą serwera, korzystając ze zdalnego szewienia schematu. Chcę, aby rozszerzenie, które dodaję na innym serwerze, powinno zostać przekazane do mojego serwera oprogramowania pośredniego w odpowiedzi.

Odpowiedz

2

czy masz console.log() żądanie? Jestem prawie pewien, że wszystko, co dostaniesz w funkcji rozszerzenia dotyczące nagłówków, które chcesz wydrukować, byłoby w żądaniu, ponieważ jest to oprogramowanie pośrednie na serwerze, odpowiedź jest czymś, co zamierzasz zmodyfikować przed wysłaniem do następnej funkcji lub z powrotem do klienta.

extensions({ document, variables, operationName, result }) { 
    // console.log the request object to check the header information from the request. 
    console.log(request); 
    return { 
     // This will fill the information key with all the headers in the request. 
     information: reaquest.header 
    }; 
} 
+0

":" i "=>" nie są konieczne. Oryginalny przykładowy kod używa skróconego dosłownie obiektu dla definicji metod. – aaronjkrause

+0

@aaronjkrause Właśnie natknąłem się na to w dokumentacji, dzięki za wskazanie tego. – RickyM

+0

@RickyM Widzę żądanie, ale 'apiHeaders: [], additionalInfo: {},' są tam puste. –