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 }
Спасибо за любые и все предложения и извинения за длинный вопрос.