在Apollo中,我们可以使用middleware来修改子图的头部。以下是一个例子:
import {
ApolloServer,
makeExecutableSchema,
ApolloServerExpressConfig
} from 'apollo-server-express';
import { applyMiddleware } from 'graphql-middleware';
import { applyMiddleware } from 'graphql-middleware';
import { makeExecutableSchema } from 'graphql-tools';
import express from 'express';
import cors from 'cors';
import bodyParser from 'body-parser';
import { authMiddleware } from './authMiddleware';
import { typeDefs } from './typeDefs';
import { resolvers } from './resolvers';
import { prisma } from './prisma';
const schema = makeExecutableSchema({
typeDefs,
resolvers
});
const middlewareSchema = applyMiddleware(schema, authMiddleware);
const server = new ApolloServer({
schema: middlewareSchema as any,
context: ({ req }) => {
return {
...req,
prisma
};
}
});
const app = express();
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
server.applyMiddleware({ app });
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
在代码中,我们首先定义了一个中间件authMiddleware
,它修改了请求头部中的Authorization
字段。
接下来,我们使用GraphQL middleware库来应用中间件到我们的schema中,得到了一个新的schema。
在最后的ApolloServer配置中,我们将中间件应用到了我们的schema中,并将其添加到express应用中。
最终,我们的子图请求会被中间件拦截,修改它的头部,然后再被传递给schema进行处理。