要解决"apollo-server-hapi的授权验证回调未被执行"的问题,可以按照以下步骤进行处理:
确保你的代码中正确地配置了Apollo Server和Hapi服务器。
确保在Hapi服务器中正确设置了路由和授权验证的回调函数。
以下是一个示例代码,展示了如何正确设置Apollo Server和Hapi服务器,并执行授权验证回调:
const { ApolloServer, gql } = require('apollo-server-hapi');
const Hapi = require('hapi');
// 定义GraphQL模式
const typeDefs = gql`
type Query {
hello: String
}
`;
// 定义GraphQL解析器
const resolvers = {
Query: {
hello: () => 'Hello World'
}
};
// 创建Apollo Server实例
const server = new ApolloServer({
typeDefs,
resolvers,
context: async ({ request }) => {
// 执行授权验证回调
const token = request.headers.authorization || '';
if (token !== 'YOUR_AUTH_TOKEN') {
throw new Error('未经授权的访问');
}
return { token };
}
});
// 创建Hapi服务器实例
const app = Hapi.server({
port: 4000,
host: 'localhost'
});
// 将Apollo Server中间件添加到Hapi服务器中
async function startServer() {
await server.applyMiddleware({ app });
await server.installSubscriptionHandlers(app.listener);
// 设置Hapi路由
app.route({
method: 'GET',
path: '/',
handler: (request, h) => {
return 'Hapi Server is running';
}
});
// 启动Hapi服务器
await app.start();
console.log(`Server running at: ${app.info.uri}`);
}
// 启动服务器
startServer().catch(err => {
console.log(err);
process.exit(1);
});
请注意,上述示例中的授权验证回调会检查请求头中的授权令牌(authorization token)。如果请求头中的授权令牌与预期的令牌不匹配,则会抛出一个错误。你可以根据自己的需求修改授权验证回调的实现。
希望以上解决方案能够帮助你解决问题!