Estou aprendendo GraphQL e tentando configurar o Apollo Server com Express (v4), mas continuo recebendo o seguinte erro ao fazer uma solicitação para /graphql
:
req.body is not set; this probably means you forgot to set up the `json` middleware before the Apollo Server middleware.
Aqui está o código do meu servidor:
const express = require("express");
const { ApolloServer } = require('@apollo/server');
const { expressMiddleware } = require('@apollo/server/express4')
const cors = require('cors');
async function startServer() {
const app = express();
const server = new ApolloServer({
typeDefs: `
type Todo {
id: ID!
title: String!
completed: Boolean!
}
type Query {
getTodos: [Todo]
}
`,
resolvers: {
Query: {
getTodos: () => []
}
}
});
await server.start();
app.use('/graphql', cors(), express.json(), expressMiddleware(server));
const PORT = process.env.PORT || 8000;
await new Promise((resolve) => app.listen(PORT, resolve));
console.log(`Server is running on port ${PORT}`);
}
startServer().catch((err) => {
console.error('Error starting the server:', err);
});
Adicionei express.json() antes do expressMiddleware, mas o erro persiste. Há algo que estou esquecendo ao usar o Apollo Server com o middleware Express 4?
Qualquer ajuda é bem-vinda!
Só um palpite: certifique-se de que seu cliente está enviando o cabeçalho.
se você estiver tentando abrir este http://localhost:8000/graphql na aba do navegador, ele mostrará esse aviso. Em vez disso, use o Postman ou qualquer outro testador de API e acesse uma solicitação de postagem em http://localhost:8000/graphql usando algumas consultas, então funcionará. porque a página do navegador está enviando uma solicitação de obtenção em vez de uma postagem e sem o Content-Type: application/json, é por isso que está dando esse erro (
req.body
não está definido; isso provavelmente significa que você esqueceu de configurar ojson
middleware antes do middleware do Apollo Server ) .