我升级到apollo 4并且我正在使用koa js。但上下文存在一些问题。身份验证过程不起作用。身份验证时我收到这样的错误:
**"message": "无法读取未定义的属性(读取'标题')" “代码”:“INTERNAL_SERVER_ERROR”,
@[email protected][email protected]/node_modules/@apollo/server/dist/esm/utils/schemaInstrumentation.js:36:28)
后端/graphql/resolvers/posts.js:31:20
后端/util/check-auth.js:5:36**
import { ApolloServer } from "@apollo/server";
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
import corsKoa from "@koa/cors";
import graphqlUploadKoa from 'graphql-upload/graphqlUploadKoa.mjs';
import { koaMiddleware as apolloServerKoa } from "@as-integrations/koa";
import http from "http";
import Koa from "koa";
import bodyParserKoa from "koa-bodyparser";
const app = new Koa();
import typeDefs from "./graphql/typeDefs.js"
import resolvers from "./graphql/resolvers/index.js"
const httpServer = http.createServer(app.callback());
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req }) => ({ req }),
plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
});
await server.start();
app.use(corsKoa());
app.use(
graphqlUploadKoa({
maxFileSize: 10000000, // 10 MB
maxFiles: 20,
})
);
app.use(bodyParserKoa());
app.use(apolloServerKoa(server));
httpServer.listen(process.env.PORT, () => {
console.info(
`Serving http://localhost:${process.env.PORT} for ${process.env.NODE_ENV}.`
);
});
检查授权文件:
import { GraphQLError } from "graphql"
import jwt from "jsonwebtoken"
export default (context) => {
const authHeader = context.req.headers.authorization;
if(authHeader) {
const token = authHeader.split("Bearer ")[1];
if(token) {
try {
const user = jwt.verify(token, process.env.SECRET_KEY);
return user
} catch(err) {
throw new GraphQLError('Invalid/Expired token');
}
}
throw new Error("Authentication token must be 'Bearer [token]");
}
throw new Error('Authorization header must be provided');
}
解决我用apollo server 4写的后端遇到的错误
@r7wgx。你已经解决这个问题了吗?我认为标题不再是一个对象字段。从 v 4.0.0 开始,它是一个地图字段。