Неопределенная проблема сеанса Apollo-server-express

Здравствуйте, я хочу создать сеанс с ApolloServer и Express, но когда я получаю журнал консоли из req.session, он дает мне неопределенность. В чем проблема?? Когда я получаю журнал консоли из req.session внутри app.get, я получаю свои результаты. Внутри компаса Mongodb я могу найти разделы сеансов, но я не знаю, как их использовать или импортировать данные внутри него. Кто-нибудь может решить эту проблему?

import '@babel/polyfill/noConflict';
import express from 'express';
import { ApolloServer } from 'apollo-server-express';
import mongoose, { mongo } from 'mongoose';
import { existsSync, mkdirSync } from 'fs';
import path from 'path';
import { resolvers } from './resolvers';
import { typeDefs } from './typeDefs';
import session from 'express-session';
import mongoconnect from 'connect-mongo';

const MongoStore = mongoconnect(session);

const app = express();

let dbUrl = 'mongodb://localhost:27017/test';
mongoose.connect(dbUrl);
mongoose.Promise = global.Promise;
let db = mongoose.connection;
db.on('error', console.error.bind(console, "DB connection error"));

const SERVER = new ApolloServer({
    typeDefs,
    resolvers,
    cors: {
        origin: '*',
        credentials: true
    },
    playground: {
        endpoint: `http://localhost:3600/graphql`,
        settings: {
            'editor.theme': 'dark'
        }
    },
    context: ({ req }) => {
        console.log(req.session) //undefined
        return req
    }
});

SERVER.applyMiddleware({
    app
});

existsSync(path.join(__dirname, "../images")) || mkdirSync(path.join(__dirname, "../images"));

app.use("/images", express.static(path.join(__dirname, "../images")));

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*"); // update to match the domain you will make the request from
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

app.use(
    session({
        store: new MongoStore({
            mongooseConnection: mongoose.connection,
            url: 'mongodb://localhost:27017/test'
        }),
        secret: "mysecret-ssss",
        resave: false,
        saveUninitialized: false,
        cookie: {
            maxAge: 1000 * 60 * 60 * 2,
            sameSite: true,
            secure: true
        }
    })
);

app.get('/', function (req, res, next) {

});

app.post('/', function (req, res, next) {
    // Handle the post for this route
});

app.listen(3600, () => {
    console.log(`Server ready at port 3600`);
});

person Mj Ebrahimzadeh    schedule 24.04.2020    source источник


Ответы (1)


Из документов Express:

Порядок загрузки ПО промежуточного слоя важен: функции ПО промежуточного слоя, загружаемые первыми, также выполняются первыми.

Промежуточное программное обеспечение сеанса необходимо применить до применения промежуточного программного обеспечения ApolloServer.

person Daniel Rearden    schedule 24.04.2020
comment
спасибо бро ты меня спас - person Mj Ebrahimzadeh; 25.04.2020