Apollo Server 2 + Express: в обработчике сообщений отсутствует требование - PullRequest
0 голосов
/ 11 октября 2018

Это работало в версии 1, но вся конфигурация сервера изменилась.Это то, что у меня есть, после добавления bodyparser () в приложение express, как было предложено Дэниелом в комментариях:

    const server = new ApolloServer({
    typeDefs,
    resolvers,
    playground: {
        settings: {
            'editor.theme': 'light',
        }
    },
})

// Initialize the app
const app = express();
app.use(cors())
app.use(bodyParser.json())

server.applyMiddleware({
    app
})

app.post('/calc', function(req, res){
    const {body} = req;

    console.log("HOWDYHOWDYHOWDY", body) // <== body is {}

    res.setHeader('content-type', 'application/json')

    calculate(body)
        .then(result => res.send(result))
        .catch(e => res.status(400).send({error: e.toString()}))    
})

Тело запроса никогда не попадает в обработчик app.post, хотя и обработчикназывается.Я вижу, что это выходит из браузера, хотя.Есть идеи?

Обновление: У Даниэля был правильный ответ, но у меня была другая проблема в заголовках запросов, которые я использовал.Как только я это исправил, обработчик поста получил тело.

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Я тоже столкнулся с этим.Исправлено, передавая в заголовки следующее:

Content-Type: application/json
0 голосов
/ 11 октября 2018

Промежуточное программное обеспечение Apollo применяет промежуточное программное обеспечение bodyparser специально к конечной точке GraphQL - оно не влияет на любые другие маршруты, предоставляемые вашим сервером.Чтобы правильно заполнить req.body, вам нужно добавить промежуточное ПО bodyparser, например:

app.use(bodyParser.json())
app.post('/calc', routeHandler)

// or...
app.post('/calc', bodyParser.json(), routeHandler)
...