Почему я не могу найти параметры сеанса в коллекции сеансов MongoDB (даже после использования MongoStore)? - PullRequest
0 голосов
/ 05 октября 2019

Когда я пытаюсь что-то вроде req.session.userId = req.body.userId в вызове POST, я не вижу, где это сохраняется в MongoDB. Я все еще могу получить req.session.userId при локальном размещении, но не на непостоянном механизме приложений, таком как Google App Engine, поэтому я хочу убедиться, что мои переменные сеанса действительно сохраняются в MongoDB.

Myфайл server.js:

const createError = require('http-errors');
const express = require('express');
if(process.env.NODE_ENV !== 'production'){require('dotenv').config();}
const cors = require('cors');
const path = require('path');
const logger = require('morgan');
var session = require('express-session');
const mongoose = require('mongoose');
const MongoStore = require('connect-mongo')(session);

var apiRouter = require('./routes/api');

const app = express();

var corsOptions = {
  origin: process.env.BASE_URL+':3000', // Note: http vs https matters
  optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
  credentials: true
}

app.use(cors(corsOptions));

// Serve static files from the React app
app.use(express.static(path.join(__dirname, 'client/build')));
app.unsubscribe(logger('dev'));

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

// DB + Sessions
mongoose.connect(process.env.MONGODB_CONNECTION_STRING,{ useNewUrlParser: true, useFindAndModify: false },(err,db)=>{
  if(err){console.log(err)}
  else{console.log('Successfully connected to MongoDB database \''+db.name+'\'')}
});
mongoose.Promise = global.Promise;
const db = mongoose.connection;

const secureCookie = (process.env.NODE_ENV==='development' ? false : true);
var sessionMiddleware = session({
    secret: 'xxxxxxx',
    resave: true,
    saveUninitialized: true,
  cookie: {
    maxAge: 3600*1000,
    secure: secureCookie
  },
  store: new MongoStore({ mongooseConnection: db })
});
app.use(sessionMiddleware);

// Put all API endpoints under '/api'
app.use('/api',apiRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.send(err.message);
});

// The "catchall" handler: for any request that doesn't
// match one above, send back React's index.html file.
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname,'/client/build/index.html'));
});

const port = process.env.PORT || 5000;
app.listen(port);

console.log(`Server listening on ${port}`);

module.exports = app;

Пример сеанса, который сохранен в коллекции сеансов MongoDB - вы можете видеть, что в него не сохраняются переменные сеанса: Пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...