React и GraphQL на одном сервере

#node.js #reactjs #express #graphql

Вопрос:

Я настраиваю приложение fullstack с express и GraphQL на бэкэнде против react на интерфейсе. Я поместил приложение react в папку клиента в серверном репозитории. Я направляю все URL-адреса, кроме api/graphql клиентского приложения, однако я не смог найти способ направлять запросы graphql на сервер.

 app.use(express.static('client/build'));

app.get('/api/graphql', (req, res) => {
  //What to do here to direct traffic to graphql server
});

app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname   'client/build/index.html'));
});

 

и я также создаю сервер с путем и подключаюсь middleware с его путем, поэтому добавление graphqlHTTP не работает.

 const server = new ApolloServer({
  schema,
  context: async ({ req, res }) => {
    return context;
  },
});

await server.start();

server.applyMiddleware({
  cors: corsConfiguration,
  app,
  path: '/api/graphql',
});
 

мы очень ценим любую помощь.

Спасибо

Ответ №1:

В GraphQL есть документация по его объединению с Express. Они предоставляют простой пример кода, который вы должны легко адаптировать:

 var express = require('express');
var { graphqlHTTP } = require('express-graphql');
var { buildSchema } = require('graphql');
 
// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
  type Query {
    hello: String
  }
`);
 
// The root provides a resolver function for each API endpoint
var root = {
  hello: () => {
    return 'Hello world!';
  },
};
 
var app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
}));
app.listen(4000);
console.log('Running a GraphQL API server at http://localhost:4000/graphql');