Apollo-server- express Session undefined проблема - PullRequest
0 голосов
/ 24 апреля 2020

Здравствуйте, я хочу сделать сеанс с 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`);
});

1 Ответ

0 голосов
/ 25 апреля 2020

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

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

Ваше промежуточное программное обеспечение сеанса должно быть применено до применения промежуточного программного обеспечения ApolloServer.

...