Я создал ApolloServer, который использует удаленную схему. Для удаленной схемы требуется токен авторизации, который я могу получить из запроса на мой сервер apollo. Вот код для сервера Apollo. Я могу жестко закодировать токен в функции customFetch, и все это работает, но я хочу передать токен, полученный при вызове, на мой сервер.
import {makeRemoteExecutableSchema, introspectSchema, mergeSchemas} from 'graphql-tools';
import {HttpLink} from 'apollo-link-http';
import {ApolloServer} from 'apollo-server';
import fetch from 'node-fetch';
// create executable schemas from remote GraphQL APIs
const customFetch = (uri, options) => {
// How do I set the token from my server req??
options.headers.Authorization =
'Bearer eyJhbGciOiJIUzI1NiIsI Not A Real Token kf5iOg9SkxDBVtQnLJuz3hXEDA';
return fetch(uri, options);
};
const createRemoteExecutableSchemas = async () => {
let schemas = [];
const link = new HttpLink({
uri: 'http://remote.graphql.server:5555/graphql',
fetch: customFetch,
});
const remoteSchema = await introspectSchema(link);
const remoteExecutableSchema = makeRemoteExecutableSchema({
schema: remoteSchema,
link,
});
schemas.push(remoteExecutableSchema);
return schemas;
};
const createNewSchema = async () => {
const schemas = await createRemoteExecutableSchemas();
return mergeSchemas({
schemas,
});
};
const runServer = async () => {
const schema = await createNewSchema();
const server = new ApolloServer({
schema
});
server.listen().then(({url}) => {
console.log(`? Server ready at ${url}`);
});
};
try {
runServer();
} catch (err) {
console.error(err);
}