Я хочу установить код состояния http в моем запросе аутентификации GraphQL в зависимости от того, была ли попытка аутентификации успешной (200), неавторизованной (401) или отсутствующими параметрами (422).
Я использую Koa и Apollo и настроил свой сервер следующим образом:
const graphqlKoaMiddleware = graphqlKoa(ctx => {
return ({
schema,
formatError: (err) => ({ message: err.message, status: err.status }),
context: {
stationConnector: new StationConnector(),
passengerTypeConnector: new PassengerTypeConnector(),
authConnector: new AuthConnector(),
cookies: ctx.cookies
}
})
})
router.post("/graphql", graphqlKoaMiddleware)
Как видите, я настроил свой formatError
так, чтобы он возвращал сообщение и статус, но в настоящее время возвращается только сообщение. Сообщение об ошибке возникает из-за ошибки, которую я бросаю в свою функцию распознавателя.
Например:
const resolvers = {
Query: {
me: async (obj, {username, password}, ctx) => {
try {
return await ctx.authConnector.getUser(ctx.cookies)
}catch(err){
throw new Error(`Could not get user: ${err}`);
}
}
}
}
Моя единственная проблема с этим методом заключается в том, что он устанавливает код состояния в сообщении об ошибке, а не фактически обновляет объект ответа.
Требует ли GraphQL ответа 200
даже для неудачных запросов / мутаций, или я могу как-нибудь обновить код состояния объектов ответа? Если нет, как мне установить вышеупомянутый код состояния объекта ошибки?