要解决Apollo网关与typescript不接受上下文中的用户ID的问题,你需要进行以下步骤:
import { Request, Response, NextFunction } from 'express';
const setUserMiddleware = (req: Request, res: Response, next: NextFunction) => {
const userId = req.headers['user-id'];
if (userId) {
req.context = {
...req.context,
userId,
};
}
next();
};
export default setUserMiddleware;
context
选项中使用setUserMiddleware
中间件来设置用户ID到上下文中。import { ApolloServer } from 'apollo-server-express';
import setUserMiddleware from './setUserMiddleware';
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req }) => {
// 创建一个空的上下文对象
const context = {};
// 将用户ID设置到上下文中
setUserMiddleware(req, null, () => {
context['userId'] = req.context.userId;
});
return context;
},
});
userId
属性来获取用户ID。const resolvers = {
Query: {
getUser: (parent, args, context) => {
const userId = context.userId;
// 使用userId进行进一步的操作
// ...
},
},
};
通过这些步骤,您可以在Apollo网关中轻松地将用户ID设置到上下文中,并在您的解析器中使用它。