Ошибка синтаксического анализа ответа Graphql с промежуточным ПО аутентификации - PullRequest
0 голосов
/ 28 февраля 2019

0

У меня есть API-интерфейс GraphQL / Koa, который я публикую в интерфейсе React.Я получаю «Неожиданный токен O в JSON в позиции 0» при вызове return response.json () в ответе для передачи данных по цепочке обещаний.Ответ поступает следующим образом:

Response {type: "cors", url: "http://localhost:8000/graphql", redirected: false, status: 200, ok: true, …}
body: (...)
bodyUsed: true
headers: Headers
__proto__: Headers
ok: true
redirected: false
status: 200
statusText: "OK"
type: "cors"
url: "http://localhost:8000/graphql"
__proto__: Response

Объект body - это разрешенное обещание, возвращающее «OK», следовательно, «O» в позиции 0 ошибка.Мой распознаватель graphql не виноват, поскольку я протестировал его с неявно возвращаемым объектом JSON, и ошибка не исчезла.Я выделил мое промежуточное ПО isAuthenticated в качестве источника ошибки, но не знаю, как реализовать его по-другому, чтобы предотвратить это.Ниже указан мой сервер и мое промежуточное ПО isAuthenticated.

//server.js 

const Koa = require('koa')
const Router = require('koa-router')
const graphqlHTTP = require('koa-graphql');
const cors = require('koa2-cors');
const bodyParser = require('koa-bodyparser')
require('dotenv').config()

const app = new Koa()
const router = new Router();

const graphqlSchema = require('./graphql/schema/index')
const graphqlResolvers = require('./graphql/resolvers/index')
const { isAuthenticated } = require('./middleware/isAuthenticated')

//middlewares
app.use(bodyParser())
app.use(cors())
app.use(isAuthenticated)


router.all('/graphql', graphqlHTTP({
   schema: graphqlSchema,
   rootValue: graphqlResolvers,
   graphiql: true,
   formatError: err => {
     console.log(err.message)
     return err.message
   }
 }));

app.use(router.routes()).use(router.allowedMethods());
//isAuthenticated.js
const jwt = require('jsonwebtoken');

const isAuthenticated = async (ctx, next) => {
  const authHeader = ctx.get('Authorization');
  if (!authHeader) {
    ctx.isAuthenticated = false;
    return next();
  }
  const token = authHeader.split(' ')[1];
  if (!token || token === '') {
    ctx.isAuthenticated = false;
    return next();
  }
  let decodedToken;
  try {
    decodedToken = jwt.verify(token, 'thisIsASuperSecretCode');
  } catch (err) {
    ctx.isAuthenticated = false;
    return next();
  }
  if (!decodedToken) {
    ctx.isAuthenticated = false;
    return next();
  }
  ctx.isAuthenticated = true;
  ctx.userId = decodedToken.userId;
  next();
}

module.exports = { isAuthenticated }

Спасибо за любые и все предложения и извинения за длинный вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...