在Apollo GraphQL中,动态标题可以在中间件之外进行设置。以下是一个示例解决方法:
首先,确保你已经在Apollo服务器中定义了一个context
对象,该对象包含了所有请求的上下文信息,例如请求头、身份验证信息等。
在context
对象中添加一个属性,用于存储动态标题的值。你可以将其命名为title
。
const server = new ApolloServer({
schema,
context: ({ req }) => {
return {
title: req.headers.title || "Default Title",
// 其他上下文信息...
};
},
});
context
对象的title
属性获取动态标题的值,并将其返回给客户端。const resolvers = {
Query: {
hello: (_, __, context) => {
const { title } = context;
return `Hello, ${title}!`;
},
},
};
const client = new ApolloClient({
uri: 'http://localhost:4000',
request: (operation) => {
operation.setContext({
headers: {
title: "Dynamic Title",
},
});
},
});
注意:在这个示例中,我们将动态标题存储在请求头的title
字段中。你可以根据自己的需求来选择存储动态标题的位置,例如在cookie中或者在其他自定义请求头字段中。确保在服务器端和客户端的对应位置进行相应的设置和读取。
这样,无论在中间件中还是在其他地方,你都可以在Apollo GraphQL中实现动态标题。