Когда я пытаюсь что-то вроде 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 - вы можете видеть, что в него не сохраняются переменные сеанса: Пример