Apollo Server 2 + Express: в обработчике сообщений отсутствует требование
Это работало в версии 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, хотя этот обработчик вызывается. Я вижу, что это выходит из браузера, хотя. Есть идеи?
Обновление: у Даниэля был правильный ответ, но у меня была другая проблема в заголовках запросов, которые я использовал. Как только я это исправил, обработчик сообщения получил тело.
1 ответ
Промежуточное программное обеспечение Apollo применяет промежуточное программное обеспечение bodyparser специально к конечной точке GraphQL - оно не повлияет на другие маршруты, предоставляемые вашим сервером. Для того, чтобы правильно заполнить req.body
, вам нужно добавить промежуточное ПО bodyparser, например:
app.use(bodyParser.json())
app.post('/calc', routeHandler)
// or...
app.post('/calc', bodyParser.json(), routeHandler)
Я тоже столкнулся с этим. Исправлено, передавая следующее в заголовки:
Content-Type: application/json