【问题标题】:Cannot get sessions in apollo server context?无法在阿波罗服务器上下文中获取会话?
【发布时间】:2021-04-29 18:35:55
【问题描述】:

我遇到了这个问题:

  • 我无法访问 apollo 服务器上下文中请求对象中的会话对象,因此我得到未定义为输出。
  • 否则我可以正常访问快速路由内的请求对象中的会话对象。

我该如何解决?

import express, { Application, Request, Response } from 'express';
import bodyParser from "body-parser"; 
import helmet from "helmet";
import xss from 'xss';
import moment from "moment";
import passport from "passport";
import { connect } from "mongoose";
import "reflect-metadata";
import { ApolloServer } from 'apollo-server-express';
import { buildSchema, ResolverData } from "type-graphql";
// Import resolvers
import main_config from './main.config';
import AuthenticationRoutes from './Authentication/Authentication.routes';
import './Authentication/Authentication.strategies';
import { 
    topicResolver, docsResolver, courseResolver, articleResolver, projectIdeaResolver 
} from './Graphql/Topics/Topics.resolvers';
import cookieSession from 'cookie-session';
import expressSession from 'express-session';
// const expGql = require("express-graphql");

const app : Application = express();

// Init cookie cookie-session
app.use(cookieSession({
    keys : ["IDFVBHNIOVFFBUE"],
    name : 'DBDIUN',
    secret : "IDFVBHNIOVFFBUE"
}));

async function runapp (){
    // Ïnit passport app and routes
    app.use(passport.initialize());
    app.use(passport.session())

    // Run apollo server 
    const apollo = new ApolloServer({
        schema : await buildSchema({
            resolvers : [
                topicResolver, docsResolver, courseResolver, articleResolver, projectIdeaResolver
            ],
            globalMiddlewares: [],
        }),
        context: ({ req, res }) =>{
            console.log("context")
            console.log(req.session.passport) // cannot get session object then Get undefined 

            return {
                getUser: () => req.user,
                logout: () => req.logout(),
            }
        },
        playground : true
    })
    apollo.applyMiddleware({ app });

    // Init body parser and helmet 
    app.use(helmet());
    app.use(bodyParser.json());

    app.use('/auth', AuthenticationRoutes)

}
runapp();

【问题讨论】:

    标签: javascript node.js graphql apollo apollo-server


    【解决方案1】:

    不要解构 req 为我工作:

     context: (req, res) => {
        return {
          req: req,
          res: res,
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2020-06-27
      • 2018-09-09
      • 2019-02-08
      • 2020-10-18
      • 2020-02-15
      • 2019-03-06
      • 1970-01-01
      • 2018-12-17
      相关资源
      最近更新 更多