res.session 未定义 graphql apollo-server-express

Posted

技术标签:

【中文标题】res.session 未定义 graphql apollo-server-express【英文标题】:res.session undefined graphql apollo-server-expres-s- 【发布时间】:2021-04-20 13:43:18 【问题描述】:

我在会话方面遇到问题。出于某种原因,即使我使用的是 req.session 也是未定义的 会话中间件。我试图使用redis,但无法使连接正常工作。 奇怪的是,出于某种原因,cookie 在 graphql 游乐场中注册。所以原因一定是我传递请求的方式,可能。

所有类型都是正确的(打字稿不会对任何事情生气)。

这是来自 server.ts 的代码

    import express,  Request, Response  from "express";
    import routes from "./routes";
    import cors from "cors";

    import "reflect-metadata"; 
    import  createConnection  from "typeorm";
    import  ApolloServer  from "apollo-server-express";
    import  buildSchema  from "type-graphql";

    import session from "express-session";

    createConnection()
      .then(async (connection) => 
    console.log("Conexão feita com sucesso");
    
    const app = express();

    app.set("trust proxy", 1);
    
    app.use(cors());

    app.use(
      session(
        name: "qid",
        secret: "keyboard cat",
        resave: false,
        saveUninitialized: true,
        cookie: 
          secure: false,
          maxAge: 1000 * 60 * 60 * 24 * 365 * 10,
          httpOnly: true,
        ,
      )
    );

    const apolloServer = new ApolloServer(
      schema: await buildSchema(
        resolvers: [
        ],
        validate: false, // Activate the validation with class-validation module.
      ),
      context: (req: Request, res: Response): Context => ( req, res, session: req.session ),
      playground: 
        settings: 
          'request.credentials': 'include',
        ,
      ,
    );

    apolloServer.applyMiddleware( app );

    app.use(express.json());
    app.use(routes);

    app.listen(3333);
  )
  .catch((error) => console.error(error));

以及我在哪里使用会话。


    @Mutation(() => UserResponse)
    async login(
    @Arg("info", () => UserLoginInputType) info: UserLoginInputType,
    @Ctx()req, res, session: Context
    ): Promise<UserResponse> 
      const user = await User.findOneOrFail( where:  email: info.email  );
      const valid = await argon2.verify(user.password, info.password);
      if (valid) 
        
        req.session.userId = user.id;
        
        return 
          user,
        ;
      
      return 
        errors: [
          
            field: "password",
            message: "Incorrect password",
          ,
        ],
      ;
     

【问题讨论】:

【参考方案1】:

我只是在传递 res 和 req 时忘记了大括号

【讨论】:

以上是关于res.session 未定义 graphql apollo-server-express的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 响应错误“未定义 URLSearchParams”

相关的 Graphql 对象给出未定义

graphql 枚举未在模式中定义

Graphql说未定义类型的验证错误

Python GraphQL 变量未定义

“预期未定义为 GraphQL 类型”的含义?